Опитвам се да използвам API за получаване на отчети, но имам проблеми с получаването на резултатите от JSON в използваема информация с помощта на JSON.NET. Разгледах доста примери, но правилният формат на класа за класовете ми убягва.
JSON данни:
{
"status": "OK",
"data": {
"event": {
"Time": "2015-09-01 17:31:47",
"Username": "user1",
"IP_Address": "1.2.3.4",
"Action": "action1",
"Data": "somedata"
},
"event": {
"Time": "2015-09-01 17:30:30",
"Username": "user2",
"IP_Address": "1.2.3.5",
"Action": "action2",
"Data": "data"
}
}
}
Къде съм сега:
using System;
using System.Collections.Generic;
using System.Linq;
using Newtonsoft.Json;
public class aRoot
{
[JsonProperty("status")]
public string status { get; set; }
[JsonProperty("data")]
public aData data { get; set; }
}
public class aData
{
[JsonProperty("event")]
public List<aEvents> events { get; set; }
}
public class aEvents
{
[JsonProperty("Time")]
public DateTime time { get; set; }
[JsonProperty("UserName")]
public string user { get; set; }
[JsonProperty("IP_Address")]
public string ip { get; set; }
[JsonProperty("Action")]
public string action { get; set; }
[JsonProperty("Data")]
public string data { get; set; }
}
aRoot objReporting = JsonConvert.DeserializeObject<aRoot>(result);
Някой има ли идеи?
Редактиране: Изход за грешка:
Възникна изключение от тип „Newtonsoft.Json.JsonSerializationException“ в Newtonsoft.Json.dll, но не беше обработено в потребителския код
Допълнителна информация: Не може да се десериализира текущият JSON обект (напр. {"name":"value"}) в тип 'System.Collections.Generic.List`1[aEvents]', защото типът изисква JSON масив (напр. [1,2 ,3]), за да се десериализира правилно.
За да коригирате тази грешка или променете JSON на JSON масив (напр. [1,2,3]) или променете десериализирания тип, така че да е нормален .NET тип (напр. не примитивен тип като цяло число, а не тип колекция като масив или списък), които могат да бъдат десериализирани от JSON обект. JsonObjectAttribute може също да се добави към типа, за да го принуди да се десериализира от JSON обект.
Път 'data.event.Time', ред 1, позиция 39.
data
обект има две свойства с едно и също имеevent
. Няма безопасен начин за достъп до тях. Разбира се, можете да използвате някои трикове за достъп до първия/втория, но това би било само хак. - person Eser   schedule 09.09.2015"data"
JSON обект има свойства с дублирани имена. За предложения как да четете такъв JSON вижте Как да десериализирате JSON с дублирани имена на свойства в един и същи обект или Json.NET (Newtonsoft.Json) - Две "свойства" с едно и също име?. Ще трябва да напишете персонализиран JsonConverter заaData
, като използвате тези два отговора като ръководство. - person dbc   schedule 10.09.2015events
катоDictionary<string, aEvents>
и трябва да сте готови да използвате оригиналния json. - person dbc   schedule 10.09.2015