2014-11-28 5 views
0

Я пишу приложение, которое использует Xamarin Newtonsoft.Json и у меня возникают проблемы со следующим сообщением об ошибке:Не удался десериализация текущего массива JSON

«Невозможно десериализации текущий массиве JSON (например, [ 1,2,3]) в тип 'learningAndroidICS.memberInfo', потому что для этого требуется, чтобы объект дескриптора JSON был правильно десериализован. Чтобы исправить эту ошибку, либо измените значениеJSON на объект JSON, либо измените десериализованный тип на массив или тип, который реализует коллекцию, подобную List, которая может быть сериализована из массива JSON. "

Учитывая, что мой код выглядит следующим образом:

currentMember = JsonConvert.DeserializeObject<memberInfo> (content); 

где CurrentMember является экземпляром класса MemberInfo, который выглядит следующим образом:

using System; 

namespace learningAndroidICS 
{ 
    public class memberInfo 
    { 
     public string id { get; set; } 
     public string lastName { get; set; } 
     public string firstName1 { get; set; } 
     public string firstName2 { get; set; } 
     public string address1 { get; set; } 
     public string address2 { get; set; } 
     public string childName1 { get; set; } 
     public string childName2 { get; set; } 
     public string childName3 { get; set; } 
     public string childName4 { get; set; } 
     public string childName5 { get; set; } 
     public string childName6 { get; set; } 
     public string childName7 { get; set; } 
     public string childName8 { get; set; } 
     public string childName9 { get; set; } 
     public string childName10 { get; set; } 
     public string childDOB1 { get; set; } 
     public string childDOB2 { get; set; } 
     public string childDOB3 { get; set; } 
     public string childDOB4 { get; set; } 
     public string childDOB5 { get; set; } 
     public string childDOB6 { get; set; } 
     public string childDOB7 { get; set; } 
     public string childDOB8 { get; set; } 
     public object childDOB9 { get; set; } 
     public string childDOB10 { get; set; } 
     public string dateActivated { get; set; } 
     public string dateDeactivated { get; set; } 
     public string isActive { get; set; } 
     public int membershipType { get; set; } 
     public string city { get; set; } 
     public string state { get; set; } 
     public string zip { get; set; } 
     public string email { get; set; } 

     public memberInfo() 
     { 
     } 
    } 
} 

Строка JSON (исходит от webservice) выглядит следующим образом:

[ 
    { 
     "id": "8", 
     "lastName": "Smith", 
     "firstName1": "John", 
     "firstName2": "Jane", 
     "address1": "123 Fake Ave", 
     "address2": "", 
     "childName1": "Bill", 
     "childName2": "John", 
     "childName3": "Jim", 
     "childName4": "", 
     "childName5": "", 
     "childName6": "", 
     "childName7": null, 
     "childName8": null, 
     "childName9": null, 
     "childName10": null, 
     "childDOB1": "11/02/1991", 
     "childDOB2": "22/10/1992", 
     "childDOB3": "11/08/1998", 
     "childDOB4": "", 
     "childDOB5": "", 
     "childDOB6": "", 
     "childDOB7": null, 
     "childDOB8": null, 
     "childDOB9": null, 
     "childDOB10": null, 
     "dateActivated": "26/11/2014", 
     "dateDeactivated": "", 
     "isActive": "1", 
     "membershipType": null, 
     "city": "Fake", 
     "state": "MI", 
     "zip": "12345", 
     "email": "[email protected]" 
    } 
] 

ответ

4

Есть две проблемы:

  1. Ваш JSON представляет список объектов, но вы пытаетесь десериализации в класс, который не является списком. Вот почему вы получаете исключение. Чтобы это исправить, необходимо изменить код:

    var list = JsonConvert.DeserializeObject<List<memberInfo>>(content); 
    currentMember = list[0]; 
    

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

  2. В вашем JSON, то membershipType свойство имеет значение null, но в своем классе он объявлен как int. При десериализации это приведет к ошибке, потому что null не может быть присвоен int.. Чтобы исправить это, вам нужно будет изменить свойство membershipType на int?.

    public int? membershipType { get; set; } 
    

После того, как вы зафиксировали оба этих проблем десериализации должен работать правильно.

+0

Спасибо! Это исправило это. – ccrunner863

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