asp.net 将对象类型的错误属性值解析为IAcctionResult,属性值为空

carvr3hs  于 2023-11-20  发布在  .NET
关注(0)|答案(1)|浏览(106)

我有一个这样的模型:

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的方式来接收字符串)。

np8igboo

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属性的类型来解决。下面是如何完成的示例:

public class ObjectA
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public OtherData OtherData { get; set; }
}

public class OtherData
{
    public DateTime? SignTime { get; set; }
    public int? ObjectId { get; set; }
    public string ConfirmStatus { get; set; }
    public string Note { get; set; }
}

字符串
使用修改后的类结构,您应该可以将JSON正确地Map到ObjectA类中,不会出现空数组问题。请确保ObjectData类中的数据类型与您的JSON数据中的真实的属性类型匹配。

相关问题