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

本文关键字:自定义 对象 转换 字符串 嵌套 json | 更新日期: 2023-09-27 18:17:41

我使用以下代码将json字符串反序列化为对象:

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

我得到这个错误:

读取字符串错误。意想不到的标记:StartArray。路径'mail',第8行,位置12

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

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"
  ]
}

我的类:

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; }            
    }

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

嗯…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, jsonrpc, id在JSON本身没有相应的字段。希望这些不会被填充

JSON文件中的一些名称/值对,如mail, uid, userpassword被定义为array。http://json.org/

但是,Account类中的同名属性不是array或List。如果您像这样更改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"
}