反序列化每个包含对其父对象的引用的嵌套对象

时间:2017-03-07 00:59:09

标签: c# .net serialization json.net deserialization

尝试反序列化每个包含对其父对象的引用的嵌套对象时,我遇到了一个问题。

我正在创建一个Seed对象,该对象引用包含Fruit对象的seed对象。 Fruit对象同样引用包含Tree的对象。

当我序列化包含TreeFruit的{​​{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
});

0 个答案:

没有答案