Вложенность типов адресса: улица, дом, квартира - C#

Узнай цену своей работы

Формулировка задачи:

Добрый вечер. Есть json строка, я пытаюсь разложить ее по типу: для каждой улицы свои дома, для дома - свои квартиры, но пока безрезультатно, поэтому прошу помощи у Вас. Набросал такую вот структуру данных:
public static class Quests
        {
            public static List<Street> Addresses { get; set; }
        }
 
        public class Street
        {
            public string Name { get; set; }
 
            public List<House> Houses { get; set; }
        }
 
        public class House
        {
            public string Number { get; set; }
 
            public Flat Flats { get; set; }
        }
 
        public class Flat
        {
            public List<int> Numbers { get; set; }
        }
Класс Quests статический, потому что делаю я это под андроид, и перекидывать данные с одного активити в другое задача не из лучших. Так же для конвертации json я использовал
RestSharp.SimpleJson
, но может есть инструменты получше? P.S. Повлиять на серверную часть и структуру json нельзя.

Решение задачи: «Вложенность типов адресса: улица, дом, квартира»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
 
namespace JsonGrouping {
    class Program {
        static void Main(string[] args) {
            JsonObject[] jsonObjects = null;
            using (Stream fs = File.OpenRead("test.json")) {
                DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(JsonObject[]));
                jsonObjects = (JsonObject[])serializer.ReadObject(fs);
            }
 
            List<AddressObject> addresses = new List<AddressObject>();
 
            foreach (var group in jsonObjects.GroupBy(o => o.Street)) {
                AddressObject address = new AddressObject(group.Key);
                List<string> houses = new List<string>();
                List<string> flats = new List<string>();
                foreach (var obj in group) {
                    if (!houses.Contains(obj.House)) {
                        houses.Add(obj.House);
                    }
 
                    if (!flats.Contains(obj.Flat)) {
                        flats.Add(obj.Flat);
                    }
                }
                address.Houses = houses;
                address.Flats = flats;
                addresses.Add(address);
            }
 
            foreach (var address in addresses) {
                Console.WriteLine(address);
            }
            Console.ReadLine();
        }
    }
    [DataContract]
    public class JsonObject {
        [DataMember(Name = "watcher_name")]
        public string Name { get; set; }
        [DataMember(Name = "date")]
        public string Date { get; set; }
        [DataMember(Name = "street")]
        public string Street { get; set; }
        [DataMember(Name = "house")]
        public string House { get; set; }
        [DataMember(Name = "flat")]
        public string Flat { get; set; }
    }
    public class AddressObject {
        public AddressObject(string street) {
            Street = street;
        }
        public string Street { get; set; }
        public List<string> Houses { get; set; }
        public List<string> Flats { get; set; }
        public override string ToString() {
            StringBuilder sb = new StringBuilder();
            sb.AppendLine(Street);
            foreach (var house in Houses) {
                sb.AppendFormat("{0} ", house);
            }
            sb.AppendLine();
            foreach (var flat in Flats) {
                sb.AppendFormat("{0} ", flat);
            }
            sb.AppendLine();
            return sb.ToString();
        }
    }
}

Оцени полезность:

12   голосов , оценка 4.5 из 5
Похожие ответы