Вложенность типов адресса: улица, дом, квартира - 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();
}
}
}