如何在asp.net中反序列化JSON数据
本文关键字:反序列化 JSON 数据 net asp | 更新日期: 2023-09-27 18:18:04
我有以下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);
在这种情况下不能使用对象,因为每个对象都有不同的属性名。反序列化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.
}
}
不能使用包含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; }
}
请检查您的json字符串objResponse.ResponseDataOfOptions
格式是否正确,也许您的字符串中有一些"
,如果是,您需要替换这些"
如下:
List<ResponseDataOfOptions> optionList = JsonConvert.DeserializeObject<List<ResponseDataOfOptions>>(objResponse.ResponseDataOfOptions.Replace(""", "'""));