我想序列化对象并将其传递给参数类型为对象父类的方法。
例如,我有这个类。
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”,程序已经陷入无限递归。
如何更改代码?
答案 0 :(得分:1)
无限递归是由 Data 属性引起的,该属性被序列化 - 导致 this 的序列化并且循环开始。
最好的解决方案是简单地将属性更改为方法,该方法不会被序列化并且更好地用于此目的。如果您在属性上设置了死区 - 您可以尝试使用http://www.newtonsoft.com/json/help/html/PropertyJsonIgnore.htm标记属性,这将导致在序列化期间忽略该属性。