【问题标题】:JsonConvert.SerializeObject with casted child to parent still returns parent properties将子级转换为父级的 JsonConvert.SerializeObject 仍返回父级属性
【发布时间】:2021-11-14 03:22:18
【问题描述】:

有点类似的问题,但答案没有意义here

public static void Main(string[] args)
{
   var myObject = new ChildClass()
   {
     P1 = "p1",
     P2 = "P2",
   };
   var data = (ParentClass)myObject;
   var jsonData = Newtonsoft.Json.JsonConvert.SerializeObject(data);

   Console.WriteLine(jsonData);
}

class ParentClass
{
  public string P1 { get; set; }
}

class ChildClass : ParentClass
{
  public string P3 { get; set; }
}  

会回来

{"P2":"P2","P1":"p1"}

在基类或子类上使用 JsonIgnore 没有意义,因为我喜欢该过程在所有其他正常情况下正常工作。

【问题讨论】:

标签: c# json.net


【解决方案1】:

如果你想用默认的序列化器序列化一个父类,你需要创建一个父类:

var myObject = new ParentClass()
{
  P1 = "p1"
};

您不能通过将对象强制转换为父对象来关闭多态性/忽略该对象是子对象。如果人为示例之外的问题根源是您的设备 X 正在为您提供一个子对象,而您想要一个父母,也许看看映射器是否可以为您将您的孩子映射到父母(或者取出仅复制父母上存在的那些属性的无聊样板)..

【讨论】:

    猜你喜欢
    • 2015-10-20
    • 1970-01-01
    • 2016-12-22
    • 2021-08-29
    • 2018-05-16
    • 2011-11-06
    • 2021-06-28
    • 2022-09-30
    相关资源
    最近更新 更多