【发布时间】:2016-03-24 21:45:00
【问题描述】:
在使用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 的构造函数。以前有人解决过这个问题吗?
非常感谢!
【问题讨论】:
-
如果你真的需要这个,你可能想改变你的设计。如果你不能序列化然后反序列化和对象,你不应该在序列化中使用它。
-
我没有收到任何错误消息,传递的值只是
null。改变架构是不可能的,因为这会导致大量的重构工作。 -
我的意思是如果你的类依赖于一个内部成员,你不能简单地反序列化它。默认情况下,序列化仅适用于公共成员。您可能希望公开 A,或以其他方式使其可序列化。
-
目前我没有内部成员。那么,公开
A是什么意思? -
A不仅会在ctor中使用。我只是想简化这个问题。但是A有一些属性和方法,需要从B访问
标签: c# json serialization json.net deserialization