尝试反序列化每个包含对其父对象的引用的嵌套对象时,我遇到了一个问题。
我正在创建一个Seed
对象,该对象引用包含Fruit
对象的seed
对象。 Fruit
对象同样引用包含Tree
的对象。
当我序列化包含Tree
和Fruit
的{{1}}时,检索到的字符串为:
Seed
当我尝试将此字符串反序列化为{
"$id": "1",
"Fruits": {
"$id": "2",
"pear": {
"$id": "3",
"Parent": {
"$ref": "1"
},
"Seeds": {
"$id": "4",
"black seed": {
"$id": "5",
"Parent": {
"$ref": "3"
}
}
}
}
}
}
对象时,Tree
对象的Parent
属性为空。
因此,Seed
对象的序列化和立即反序列化会导致预序列化Tree
对象中的属性值为null。
重现此问题的代码是:
Tree
课程是:
var tree = new Tree();
var fruit = new Fruit(tree);
tree.Fruits.Add("pear", fruit);
var seed = new Seed(fruit);
fruit.Seeds.Add("black seed", seed);
var objString = JsonConvert.SerializeObject(tree, Formatting.None, new JsonSerializerSettings
{
PreserveReferencesHandling = PreserveReferencesHandling.Objects
});
var deserializedTree = (Tree)JsonConvert.DeserializeObject(objString, typeof(Tree), new JsonSerializerSettings
{
PreserveReferencesHandling = PreserveReferencesHandling.Objects
});