2016-12-02 1 views
0

мой JSON, какНе можете десериализации текущий массив JSON в одном подкаталоге массиве

{ 
"code":"1", 
"message":"The request succeeded", 
"contacts":  
      { "contactId":"58330efb45cedb9087e281e6", 
      "email":"", 
      "firstName":"", 
      "lastName":"", 
      "number":"4145075733" 
      } 
} 

и я пытаюсь использовать DeserializeObject с этим Generic.List

public class AllContacts 
{ 
    public string code { get; set; } 
    public string message { get; set; } 
    public List<ContactList> contacts { get; set; } 
} 
public class ContactList 
{ 
    public string contactId { get; set; } 
    public string email { get; set; } 
    public string firstName { get; set; } 
    public string lastName { get; set; } 
    public string number { get; set; } 
} 

это работает отлично с двумя или более данными в контактном массиве, но он не работает в одиночных данных.

Ошибка:

Cannot deserialize the current JSON object (eg.{"name":"value"}) into type 'System.Collections.Generic.List'1[smsApplication.Controller‌​s.ContactList]' because the type requires a JSON array to deserialize correctly. To fix this error either change the JSON to a JSON array or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.

+0

определите "не работает". Вы получаете сообщение об ошибке, или оно не дает ожидаемого результата? Приведите пример. – ADyson

+0

«Не работает» дает ошибку Невозможно десериализовать текущий объект JSON (например, {«name»: «value»}) в тип «System.Collections.Generic.List'1 [smsApplication.Controllers.ContactList]», потому что для этого требуется тип массив JSON для десериализации правильно. Чтобы исправить эту ошибку, либо измените JSON на массив JSON, либо измените десериализованный тип, чтобы он был обычным типом .NET (например, не примитивным типом типа integer, а не типом коллекции, подобным массиву или List ), который может быть десериализован из объекта JSON. JsonObjectAttribute также можно добавить к типу, чтобы заставить его десериализовать объект JSON. – user2157094

+0

Другой подход: вы можете использовать JObject и SelectToken для вывода данных. – Netferret

ответ

1

Это потому, что contact является объектом JSON, а не JSON массив

Либо обновить JSON, чтобы соответствовать определенным классам

{ 
"code":"1", 
"message":"The request succeeded", 
"contacts":[  
      { "contactId":"58330efb45cedb9087e281e6", 
      "email":"", 
      "firstName":"", 
      "lastName":"", 
      "number":"4145075733" 
      }] 
} 

Или обновить классы соответствуют json

public class AllContacts 
{ 
    public string code { get; set; } 
    public string message { get; set; } 
    public ContactList contacts { get; set; } 
} 

public class ContactList 
{ 
    public string contactId { get; set; } 
    public string email { get; set; } 
    public string firstName { get; set; } 
    public string lastName { get; set; } 
    public string number { get; set; } 
} 

Сообщение об ошибке объясняет, что вы делаете.