将嵌套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.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"
}