2016-06-05 4 views
0

У меня есть задача, которая требует от меня десериализации JSON для объектов C# и последующей обработки. Пожалуйста, несите меня, файлы JSON и Class большие.Преобразование нескольких JSON в объект JSON.NET

Выход JSON образца, который я разбор выглядит так:

{ 
    "systemTime": 1465126640, 
    "timeSinceStartup": 174758912, 
    "neighbors": [ 
    { 
     "ipAddress": "10.0.0.2", 
     "symmetric": true, 
     "multiPointRelay": true, 
     "multiPointRelaySelector": false, 
     "willingness": 3, 
     "twoHopNeighborCount": 1 
    } 
    ], 
    "links": [ 
    { 
     "localIP": "10.0.0.1", 
     "remoteIP": "10.0.0.2", 
     "validityTime": 38810, 
     "linkQuality": 1.000, 
     "neighborLinkQuality": 1.000, 
     "linkCost": 1024 
    } 
    ], 
    "routes": [ 
    { 
     "destination": "10.0.0.2", 
     "genmask": 32, 
     "gateway": "10.0.0.2", 
     "metric": 1, 
     "rtpMetricCost": 1024, 
     "networkInterface": "mesh0" 
    }, 
    { 
     "destination": "10.0.0.3", 
     "genmask": 32, 
     "gateway": "10.0.0.2", 
     "metric": 2, 
     "rtpMetricCost": 2531, 
     "networkInterface": "mesh0" 
    }, 
    { 
     "destination": "10.0.0.4", 
     "genmask": 32, 
     "gateway": "10.0.0.2", 
     "metric": 3, 
     "rtpMetricCost": 3555, 
     "networkInterface": "mesh0" 
    }, 
    { 
     "destination": "10.0.0.5", 
     "genmask": 32, 
     "gateway": "10.0.0.2", 
     "metric": 3, 
     "rtpMetricCost": 4732, 
     "networkInterface": "mesh0" 
    }, 
    { 
     "destination": "10.0.0.6", 
     "genmask": 32, 
     "gateway": "10.0.0.2", 
     "metric": 4, 
     "rtpMetricCost": 6151, 
     "networkInterface": "mesh0" 
    } 
    ], 
    "topology": [ 
    { 
     "destinationIP": "10.0.0.2", 
     "lastHopIP": "10.0.0.1", 
     "linkQuality": 1.000, 
     "neighborLinkQuality": 1.000, 
     "tcEdgeCost": 1024, 
     "validityTime": 0 
    }, 
    { 
     "destinationIP": "10.0.0.1", 
     "lastHopIP": "10.0.0.2", 
     "linkQuality": 1.000, 
     "neighborLinkQuality": 1.000, 
     "tcEdgeCost": 1024, 
     "validityTime": 283361 
    }, 
    { 
     "destinationIP": "10.0.0.3", 
     "lastHopIP": "10.0.0.2", 
     "linkQuality": 0.940, 
     "neighborLinkQuality": 0.721, 
     "tcEdgeCost": 1507, 
     "validityTime": 283361 
    }, 
    { 
     "destinationIP": "10.0.0.2", 
     "lastHopIP": "10.0.0.3", 
     "linkQuality": 0.721, 
     "neighborLinkQuality": 0.940, 
     "tcEdgeCost": 1507, 
     "validityTime": 277026 
    }, 
    { 
     "destinationIP": "10.0.0.4", 
     "lastHopIP": "10.0.0.3", 
     "linkQuality": 1.000, 
     "neighborLinkQuality": 1.000, 
     "tcEdgeCost": 1024, 
     "validityTime": 277026 
    }, 
    { 
     "destinationIP": "10.0.0.5", 
     "lastHopIP": "10.0.0.3", 
     "linkQuality": 0.662, 
     "neighborLinkQuality": 0.701, 
     "tcEdgeCost": 2201, 
     "validityTime": 277026 
    }, 
    { 
     "destinationIP": "10.0.0.3", 
     "lastHopIP": "10.0.0.4", 
     "linkQuality": 1.000, 
     "neighborLinkQuality": 0.940, 
     "tcEdgeCost": 1088, 
     "validityTime": 274952 
    }, 
    { 
     "destinationIP": "10.0.0.5", 
     "lastHopIP": "10.0.0.4", 
     "linkQuality": 0.940, 
     "neighborLinkQuality": 0.529, 
     "tcEdgeCost": 2055, 
     "validityTime": 274952 
    }, 
    { 
     "destinationIP": "10.0.0.3", 
     "lastHopIP": "10.0.0.5", 
     "linkQuality": 0.701, 
     "neighborLinkQuality": 0.662, 
     "tcEdgeCost": 2201, 
     "validityTime": 280956 
    }, 
    { 
     "destinationIP": "10.0.0.4", 
     "lastHopIP": "10.0.0.5", 
     "linkQuality": 0.607, 
     "neighborLinkQuality": 0.940, 
     "tcEdgeCost": 1789, 
     "validityTime": 280956 
    }, 
    { 
     "destinationIP": "10.0.0.6", 
     "lastHopIP": "10.0.0.5", 
     "linkQuality": 1.000, 
     "neighborLinkQuality": 0.721, 
     "tcEdgeCost": 1419, 
     "validityTime": 280956 
    }, 
    { 
     "destinationIP": "10.0.0.5", 
     "lastHopIP": "10.0.0.6", 
     "linkQuality": 0.831, 
     "neighborLinkQuality": 0.940, 
     "tcEdgeCost": 1308, 
     "validityTime": 269860 
    } 
    ] 
} 

Обратите внимание, что topology узла (я не уверен в жаргоне) имеет более одного значения, хранящееся. Количество значений здесь - это переменная, то есть она увеличивается со временем.

Классы я сгенерированные разобрать этот JSON это (создается с использованием http://jsonutils.com/):

public class Neighbor 
    { 
     public string ipAddress { get; set; } 
     public bool symmetric { get; set; } 
     public bool multiPointRelay { get; set; } 
     public bool multiPointRelaySelector { get; set; } 
     public int willingness { get; set; } 
     public int twoHopNeighborCount { get; set; } 
    } 

    public class Link 
    { 
     public string localIP { get; set; } 
     public string remoteIP { get; set; } 
     public int validityTime { get; set; } 
     public double linkQuality { get; set; } 
     public double neighborLinkQuality { get; set; } 
     public int linkCost { get; set; } 
    } 

    public class Route 
    { 
     public string destination { get; set; } 
     public int genmask { get; set; } 
     public string gateway { get; set; } 
     public int metric { get; set; } 
     public int rtpMetricCost { get; set; } 
     public string networkInterface { get; set; } 
    } 

    public class Topology 
    { 
     public string destinationIP { get; set; } 
     public string lastHopIP { get; set; } 
     public double linkQuality { get; set; } 
     public double neighborLinkQuality { get; set; } 
     public int tcEdgeCost { get; set; } 
     public int validityTime { get; set; } 
    } 

    public class Gizmo 
    { 
     public int systemTime { get; set; } 
     public int timeSinceStartup { get; set; } 
     public IList<Neighbor> neighbors { get; set; } 
     public IList<Link> links { get; set; } 
     public IList<Route> routes { get; set; } 
     public IList<Topology> topology { get; set; } 
    } 

Мой вопрос я видел пример Newtonsoft JSON.net десериализации, который показывает, а именно:

string json = @"{ 
    'Name': 'Bad Boys', 
    'ReleaseDate': '1995-4-7T00:00:00', 
    'Genres': [ 
    'Action', 
    'Comedy' 
    ] 
}"; 

Movie m = JsonConvert.DeserializeObject<Movie>(json); 

string name = m.Name; 
// Bad Boys 

Мой вопрос: Как это сделать для нескольких объектов (не уверен в жаргоне, снова) JSON, как шахты?

P.S. Я обращаюсь к json удаленно:

WebClient client = new WebClient(); 
Stream stream = client.OpenRead(DLinks.jsonUrl1); 
Debug.Assert(stream != null, "stream != null"); 
StreamReader reader = new StreamReader(stream); 

Любые указатели, образцы и т. Д. Будут полезны. Спасибо.

ответ

3

Просто попробуйте:

Gizmo gizmo = JsonConvert.DeserializeObject<Gizmo>(jsonStr); 

У вас есть список топологий в гизмо классе не список вещицы. Оттуда вы можете получить список топологий.

Если у вас есть список вещиц вы можете получить их, как это:

List<Gizmo> gizmos JsonConvert.DeserializeObject<List<Gizmo>>(jsonStr); 

Вот как вы можете получить все топологий:

Gizmo gizmo = JsonConvert.DeserializeObject<Gizmo>(jsonStr); 
List<Topology> topologies = gizmo.topology.ToList(); 
+0

Эй спасибо много. Можете ли вы разработать и расширить этот ответ, чтобы показать, как я могу использовать список топологий? Тогда я буду отмечать это как ответ, как часть моего первоначального вопроса. –

+0

Привет, я продлил ответ, чтобы показать вам, как вы можете получить список топологии из объекта gizmo. Надеюсь, это поможет. –

+0

Большое спасибо. Это было действительно полезно. –

Смежные вопросы