使用 Newtonsoft.Json
反序列化对象时,我在将一些父实例传递给构造函数方面遇到了一些小问题。
假设我有以下类:
public class A
{
public string Str1 { get; set; }
public IList<B> Bs { get; set; }
}
public class B
{
public B(A a)
{
// a should not be null!
Console.WriteLine(a.Str)
}
}
现在我像这样对对象a
进行序列化和反序列化:
A a = new A()
a.Bs = new List<B>()
a.Bs.Add(new B(a));
a.Bs.Add(new B(a));
a.Bs.Add(new B(a));
var json = JsonConvert.SerializeObject(a);
// Here i need to call the constructor of B when creating new instances
var newA = JsonConvert.DeserializeObject<A>(json);
问题在于,当反序列化对象时,null
将传递给 B
的构造函数。有人之前解决过这个问题吗?
非常感谢!
A
公开是什么意思? - BendEgA a
?如果你需要在反序列化时运行逻辑,那么该类可能不适合用于序列化。不管怎样,如果你真的需要它而且不想重新设计,请参考如何传递参数给非默认构造函数? - CodeCasterA
不仅仅会在构造函数中使用。我只是想简化问题。但A
有一些属性和方法,需要从B
中访问。 - BendEg