2015-09-28 4 views
3

I Сериализовать класс ниже по Newtonsoft.Json, но я не могу Deserialize того же json от Newtonsoft.Json. Как я могу это сделать?Как десериализовать список объектов json от NewtonSoft?

Json:

"{\"UserEvents\":[{\"id\":1214308,\"Date\":20150801000000,\"IsRead\":true}]}" 

Мои Сущности:

public class UserEventLog { 
    [JsonProperty("UserEvents")] 
    public List<UserEvent> UserEvents { get; set; } 
    public UserEventLog() { 
     UserEvents = new List<UserEvent>(); 
    } 
} 


public class UserEvent { 
    [JsonProperty("id")] 
    public long id{ get; set; } 
     [JsonProperty("Date")] 
    public long Date{ get; set; } 
     [JsonProperty("IsRead")] 
    public bool IsRead { get; set; } 
} 

Мои десериализатор является то, что:

List<UserEventLog> convert = JsonConvert.DeserializeObject<List<UserEventLog>>(user.ToString()) as List<UserEventLog>; 

Но Ошибка производится:

Необработанное исключение типа 'Newtonsoft.Json.JsonSerializationException' произошло в Newtonsoft.Json.dll

Дополнительная информация: Ошибка преобразования значения "{"UserEvents":[{"id":1214308,"Date":20150801000000,"IsRead":true}]}" к типу «System.Collections.Generic.List`1

Как я могу решить эту проблему? как я могу удалить десериализацию списка объектов в список UserEvents?

+0

вашей JSON-данных не содержит список, его имеет один объект – Backs

+1

Строка вашего примера не является списком 'UserEventLog'. – crashmstr

ответ

4

Это работает в LINQPad:

void Main() 
{ 
    var user = "{\"UserEvents\":[{\"id\":1214308,\"Date\":20150801000000,\"IsRead\":true}]}"; 
    UserEventLog convert = JsonConvert.DeserializeObject<UserEventLog>(user.ToString()); 
    convert.UserEvents.Count().Dump(); 
} 

public class UserEventLog { 
    [JsonProperty("UserEvents")] 
    public List<UserEvent> UserEvents { get; set; } 
    public UserEventLog() { 
     UserEvents = new List<UserEvent>(); 
    } 
} 


public class UserEvent { 
    [JsonProperty("id")] 
    public long id{ get; set; } 
     [JsonProperty("Date")] 
    public long Date{ get; set; } 
     [JsonProperty("IsRead")] 
    public bool IsRead { get; set; } 
} 

Проблема заключается в том, что вы пытаетесь десериализации в списке, но это не массив UserEvents

+0

Вам не нужен 'as UserEventLog', поскольку [DeserializeObject ] (http://www.newtonsoft.com/json/help/html/M_Newtonsoft_Json_JsonConvert_DeserializeObject__1.htm) возвращает T. – crashmstr

+0

@crashmstr Да, спасибо. Отредактировано: –

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