c# - Newtonsoft 在基类的序列化中包含子属性?

标签 c# json inheritance json.net

我有两个类,看起来像这样:

class BaseClass
{
    public string Property1;
}

class ChildClass : BaseClass
{
    public string Property2;
}

如果我创建 ChildClass 的实例,然后转换为 BaseClass 并 Json 序列化它,则 ChildClass 的属性就会显示。

ChildClass childInstance = new ChildClass() { Property1 = "1", Property2 = "2" };

BaseClass baseInstance = (BaseClass)childInstance;

Console.WriteLine(JsonConvert.SerializeObject(baseInstance, Formatting.Indented));
            
{
  "Property2": "2",
  "Property1": "1"
}

尽管事实上,Property2 无法从代码中的 baseInstance 访问。

为什么会发生这种情况?有好的解决办法吗?

最佳答案

SerializeObject 是一种非泛型方法,它采用 object 作为参数 - 然后它在内部使用 .GetType() 来发现对象是。因此:您在代码中考虑的类型并不重要;重要的是对象实际上是什么。从object参数的角度来看:没有相关成员是直接可见的。这根本不是障碍。

关于c# - Newtonsoft 在基类的序列化中包含子属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69173263/

相关文章:

c# - 关于JavaScriptSerializer的一些问题

Python JSON 抓取 - 如何处理缺失值?

java - Gson如何将json转换为自定义类

c# - System.Net.Sockets.Tcpclient.Connect 错误 <String hostname, Int32 port>

c# - 编码 LPSTR 和 float 时堆栈不平衡

json - 如何在jsonnet中将字符串转换为整数?

没有继承的 Ruby 类重写

objective-c - swift 3 - 方法不会覆盖其父类(super class)中的任何方法

java - 在java中继承后 protected 成员会发生什么?

c# - 尝试使用反射在集合中查找属性值