我正在使用此代码将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"
]
}
答案 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; }
}
应该更好......
顺便说一句,属性CID
,jsonrpc
id
在JSON本身中没有相应的字段。所以期望这些不会被填充。
答案 1 :(得分: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": "john.doe@foo.com",
"sn": "Doe",
"givenName": "John",
"uid": "jdoe",
"cn": "jdoe",
"userPassword": "xxx"
}