Вложенность типов адресса: улица, дом, квартира - C#
Формулировка задачи:
Добрый вечер. Есть json строка, я пытаюсь разложить ее по типу: для каждой улицы свои дома, для дома - свои квартиры, но пока безрезультатно, поэтому прошу помощи у Вас. Набросал такую вот структуру данных:
Класс Quests статический, потому что делаю я это под андроид, и перекидывать данные с одного активити в другое задача не из лучших. Так же для конвертации json я использовал , но может есть инструменты получше?
P.S. Повлиять на серверную часть и структуру 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; } }
RestSharp.SimpleJson
Решение задачи: «Вложенность типов адресса: улица, дом, квартира»
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(); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д