如何将派生类序列化为基类?

时间:2016-09-07 13:45:32

标签: c# json.net

我想序列化对象并将其传递给参数类型为对象父类的方法。

例如,我有这个类。

public class Base
{
    public string TypeName => GetType().Name;
    public string Data => JsonConvert.SerializeObject(this);
}

public class Derived : Base
{
    public string Name { get; set; }
    public int data1 { get; set; }
    public int data2 { get; set; }
}

public class Derived2 : Base
{
    ...
}

....

我编写了如下代码,

var obj = new Derived { Name = "John", data1 = 2000, data2 = 1500 };
Send(obj);

Send(..)方法是,

public void Send(Base info)
{
    // Do Something with "info".
}

当我实例化变量obj时,由于Base类中的“Data”,程序已经陷入无限递归。

如何更改代码?

1 个答案:

答案 0 :(得分:1)

无限递归是由 Data 属性引起的,该属性被序列化 - 导致 this 的序列化并且循环开始。

最好的解决方案是简单地将属性更改为方法,该方法不会被序列化并且更好地用于此目的。如果您在属性上设置了死区 - 您可以尝试使用http://www.newtonsoft.com/json/help/html/PropertyJsonIgnore.htm标记属性,这将导致在序列化期间忽略该属性。