首页 > 解决方案 > 将子级转换为父级的 JsonConvert.SerializeObject 仍返回父级属性

问题描述

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

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

解决方案


如果要使用默认序列化程序序列化父类,则需要创建父类:

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

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


推荐阅读