我有以下JSON数据,类和代码,但它没有工作。我得到3个对象列表,但都是NULL。任何人都可以建议我在这里缺少什么?
JSON数据:
[
{
"donotpostalmail": {
"Do Not Allow": {
"Do Not Allow": 1
},
"Allow": {
"Allow": 0
}
}
},
{
"familystatuscode": {
"Single": {
"Single": 1
},
"Married": {
"Married": 2
},
"Divorced": {
"Divorced": 3
},
"Widowed": {
"Widowed": 4
}
}
},
{
"preferredcontactmethodcode": {
"Any": {
"Any": 1
},
"Email": {
"Email": 2
},
"Phone": {
"Phone": 3
},
"Fax": {
"Fax": 4
},
"Mail": {
"Mail": 5
}
}
}
]
类别:
public class ResponseDataOfOptions
{
public OptionsList mainList { get; set; }
}
public class OptionsList
{
public Dictionary<string, Options> optionList { get; set; }
}
public class Options
{
public Dictionary<string, int> options { get; set; }
}
.cs文件代码:
List<ResponseDataOfOptions> optionList = JsonConvert.DeserializeObject<List<ResponseDataOfOptions>>(objResponse.ResponseDataOfOptions);
答案 0 :(得分:2)
在这种情况下,您不能使用对象,因为每个对象都有不同的属性名称。反序列化此JSON的唯一方法如下。
JsonConvert.DeserializeObject<List<
Dictionary<string,
Dictionary<string,
Dictionary<string, int>
>
>
>>(objResponse.ResponseDataOfOptions);
这是一个词典列表,实际上有三个级别的词典。使用数据并不是一个非常友好的结构,但是会进行反序列化。
您可能还有兴趣使用JObject
和JToken
使用某些属性检测,然后对相应的数据传输对象进行充气。
JObject list = JObject.Parse(objResponse.ResponseDataOfOptions);
foreach (var item in list) {
JToken token = jobj["donotpostalmail"];
if (token != null) {
// inflate the corresponding data type.
}
}
答案 1 :(得分:1)
您不能使用包含3种不同对象类型的数组。 如果你想这样做,我建议使用容器对象而不是数组:
{
"responseDataOfOptions": {
"donotpostalmail": {
"Do Not Allow": {
"Do Not Allow": 1
},
"Allow": {
"Allow": 0
}
}
},
"optionsList": {
"familystatuscode": {
"Single": {
"Single": 1
},
"Married": {
"Married": 2
},
"Divorced": {
"Divorced": 3
},
"Widowed": {
"Widowed": 4
}
}
},
"options": {
"preferredcontactmethodcode": {
"Any": {
"Any": 1
},
"Email": {
"Email": 2
},
"Phone": {
"Phone": 3
},
"Fax": {
"Fax": 4
},
"Mail": {
"Mail": 5
}
}
}
}
相应的C#类必须如下所示:
public class JsonResponse {
public ResponseDataOfOptions responseDataOfOptions{ get; set; }
public OptionsList optionsList{ get; set; }
public Options options { get; set; }
}
答案 2 :(得分:0)
请检查您的json字符串objResponse.ResponseDataOfOptions
格式是否正确,可能您的字符串中有一些"
,如果是,则需要替换这些"
,如下所示:
List<ResponseDataOfOptions> optionList = JsonConvert.DeserializeObject<List<ResponseDataOfOptions>>(objResponse.ResponseDataOfOptions.Replace(""", "\""));