2015-10-15 2 views
0

Я использую этот код для десериализации JSON строки в объект:Преобразование вложенной строки JSON для пользовательского объекта

var account = JsonConvert.DeserializeObject<LdapAccount>(result.ToString()); 

Я получаю эту ошибку:

Error reading string. Unexpected token: StartArray. Path 'mail', line 8, position 12.

Я знаю, что это из-за вложенные в json, но не уверены, как их решить. Меня интересуют только свойства в моем пользовательском классе.

Json строка:

{ 
    "DN": "cn=jdoe,ou=test,dc=foo,dc=com", 
    "objectClass": [ 
    "inetOrgPerson", 
    "organizationalPerson", 
    "person" 
    ], 
    "mail": [ 
    "[email protected]" 
    ], 
    "sn": [ 
    "Doe" 
    ], 
    "givenName": [ 
    "John" 
    ], 
    "uid": [ 
    "jdoe" 
    ], 
    "cn": [ 
    "jdoe" 
    ], 
    "userPassword": [ 
    "xxx" 
    ] 
} 

Мой класс:

public class Account 
    { 
     public string CID { get; set; }    
     public string jsonrpc { get; set; } 
     public string id { get; set; } 
     public string mail { get; set; } 
     public string uid { get; set; } 
     public string userPassword { get; set; }    
    } 

ответ

1

Хм ... нотация JSON ожидает массив или список строк, но вы его ожидали одну строку.

Если вы используете JSON.NET, вы можете изменить его, как это:

public class Account 
{ 
    public string CID { get; set; }    
    public string jsonrpc { get; set; } 
    public string id { get; set; } 
    public List<string> mail { get; set; } 
    public List<string> uid { get; set; } 
    public List<string> userPassword { get; set; }    
} 

Должно работать лучше ...

BTW, свойства CID, jsonrpcid не имеют соответствующих полей в формате JSON сам. Поэтому ожидайте, что они не будут заселены.

1

Некоторые пары имени/значения в вашем файле JSON, такие как mail, uid, userpassword, определены как array. http://json.org/

Howerver, одноименные свойства в классе Account не являются массивами или списком. Если вы измените свой JSON-файл таким образом, десериализация будет работать.

{ 
    "DN": "cn=jdoe,ou=test,dc=foo,dc=com", 
    "objectClass": [ 
    "inetOrgPerson", 
    "organizationalPerson", 
    "person" 
    ], 
    "mail": "[email protected]", 
    "sn": "Doe", 
    "givenName": "John", 
    "uid": "jdoe", 
    "cn": "jdoe", 
    "userPassword": "xxx" 
} 
Смежные вопросы