У меня есть задача, которая требует от меня десериализации 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);
Любые указатели, образцы и т. Д. Будут полезны. Спасибо.
Эй спасибо много. Можете ли вы разработать и расширить этот ответ, чтобы показать, как я могу использовать список топологий? Тогда я буду отмечать это как ответ, как часть моего первоначального вопроса. –
Привет, я продлил ответ, чтобы показать вам, как вы можете получить список топологии из объекта gizmo. Надеюсь, это поможет. –
Большое спасибо. Это было действительно полезно. –