将嵌套的json字符串转换为自定义对象

时间:2015-10-15 00:23:42

标签: c# json json-deserialization

我正在使用此代码将json字符串反序列化为对象:

url(r'^api/base/', api_views.BaseAPIView.as_view()),
url(r'^api/child/', api_views.ChildAPIView.as_view()),

我收到此错误:

  

读取字符串时出错。意外的令牌:StartArray。路径'邮件',第8行,第12位。

我知道这是因为json中的嵌套,但不知道如何解决。我只关心自定义类中的属性。

Json string:

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

我的课程:

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

2 个答案:

答案 0 :(得分: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; }            
}

应该更好......

顺便说一句,属性CIDjsonrpc id在JSON本身中没有相应的字段。所以期望这些不会被填充。

答案 1 :(得分:1)

您的JSON文件中的某些名称/值对(如mail,uid,userpassword)定义为arrayhttp://json.org/

Howerver,Account类中的相同名称属性不是数组或列表。如果您像这样更改JSON文件,则反序列化将起作用。

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