我有一个这样的模型:
public class ObjectA
{
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public object OtherData { get; set; }
}
字符串
同样的JSON数据:
{
"id" : 12 ,
"name": "Ababa",
"description": "data Des",
"otherData": {
"signTime":null,
"objectId":129,
"confirmStatus": null,
"note": "nothing"
}
}
型
我接收到这些数据,并使用Newtonsoft.JSON提供程序的JsonConvert. jsonializer将这些JSON内容解析为我的对象,但在我返回控制器值处的数据类型IAcctionResult后,它变成了这样:
{
"id" : 12 ,
"name": "Ababa",
"description": "data Des",
"otherData": {
"signTime":[],
"objectId":[],
"confirmStatus": [],
"note": []
}
}
型
我的代码错在哪里?
我的结果预期会接收JSON数据(而不是使用parse otherData的方式来接收字符串)。
1条答案
按热度按时间np8igboo1#
JSON对象的结构与您的C#类ObjectA的结构不匹配,这就是您在JSON解析时遇到问题的原因。特别是,JSON解析器将JSON数据中具有null值的某些属性解释为数组,尽管C#类中的属性(如int和string)是强类型的。
以下是该地区正在发生的事情:
在C#类ObjectA中,有一个名为ObjectData的字段被声明为object。此属性不是严格类型的。JSON序列化程序(如Newtonsoft.JSON)会在您对JSON进行序列化时尝试将JSON值转换为最接近的C#类型。
您的JSON数据中的“signTime"、“objectId"和“confirmStatus”为null,由于configuration Data的类型为object,JSON序列化器无法确定这些属性的数据类型,因此会将其视为数组。
这个问题可以通过创建一个不同的类来反映“otherData”对象的结构,然后将该类用作ObjectA类中otherData属性的类型来解决。下面是如何完成的示例:
字符串
使用修改后的类结构,您应该可以将JSON正确地Map到ObjectA类中,不会出现空数组问题。请确保ObjectData类中的数据类型与您的JSON数据中的真实的属性类型匹配。