从具有属性空值的对象类型中解析错误的属性值到IAcctionResult

问题描述 投票:0回答:1

我有一个这样的模特

 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.Deserializer 将此 Json 解析为我的对象,但在返回数据类型 IAcctionResult 后,它们的控制器值变得像这样

 {
        "id" : 12 ,
        "name": "Ababa",
        "description": "data Des",
        "otherData": { 
          "signTime":[],
          "objectId":[],
          "confirmStatus": [],
          "note": []
        }
    }

我的代码哪里错了?

我的结果预期类似于接收 json 数据(而不是使用将 otherData 解析为字符串的方式)。 谢谢大家。

asp.net asp.net-core asp.net-apicontroller
1个回答
0
投票

当您将 JSON 反序列化为 ObjectA 类,然后再次序列化它以从 IActionResult 返回时,对象类型的 OtherData 属性似乎未正确序列化回 JSON。它不是将其序列化为嵌套对象,而是将 OtherData 的属性序列化为数组。

最可能的问题是序列化和反序列化期间处理 OtherData 的方式。由于 OtherData 是对象类型,因此序列化程序可能无法推断嵌套属性的正确类型。

以下是诊断和解决此问题的一些步骤:

  1. 检查您的序列化设置:确保序列化 反序列化和序列化时的设置保持一致 对象一个对象。

  2. 强类型其他数据:而不是使用对象类型 OtherData,定义一个代表的类是一个很好的做法 其他数据的结构。这样,序列化器就可以准确地知道 怎么处理。

  3. 自定义转换器:如果您必须使用对象作为其他数据,您可能需要 编写一个可以处理序列化的自定义 JsonConverter 正确反序列化该属性。

以下是如何实施前两条建议的快速说明:

为其他数据定义强类型

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 bool? ConfirmStatus { get; set; }
   public string Note { get; set; }
}

反序列化和序列化 当你反序列化时,你会做类似的事情:

var myObject = JsonConvert.DeserializeObject<ObjectA>(jsonString);

当你将其序列化回 JSON 时:

var jsonResult = JsonConvert.SerializeObject(myObject);

如果您进行这些调整并且您的 OtherData 是已定义的类而不是普通对象,则序列化程序将知道如何正确处理属性。

但是,如果由于内容的动态性质,您仍然希望将 OtherData 保留为对象,则可能需要实现自定义 JsonConverter。

© www.soinside.com 2019 - 2024. All rights reserved.