3
各ノードが親と子の両方の参照を持つツリーを逆シリアル化しようとしています。ツリーをシリアライズすることは問題なく動作しますが、それを逆シリアル化しても親参照は保持されません。代わりにnullになります。私は単純化された何をしようとしている何C#二重化されたツリーの逆シリアル化の問題
:
Before deserializing:
{
"$id": "1",
"Parent": null,
"Children": [
{
"$id": "2",
"Parent": {
"$ref": "1"
},
"Children": []
}
]
}
After deserializing:
{
"$id": "1",
"Parent": null,
"Children": [
{
"$id": "2",
"Parent": null,
"Children": []
}
]
}
が、これはJson.netのバグです:
using System;
using System.Collections.Generic;
using Newtonsoft.Json;
static class MainClass {
public static void Main() {
var node = new Node(null);
node.AddChild();
var settings = new JsonSerializerSettings { PreserveReferencesHandling = PreserveReferencesHandling.Objects, Formatting = Formatting.Indented };
//serializing
string json1 = JsonConvert.SerializeObject(node, settings);
Console.WriteLine("Before deserializing:");
Console.WriteLine(json1);
Console.WriteLine();
//deserializing
node = JsonConvert.DeserializeObject<Node>(json1, settings);
//serializing again
string json2 = JsonConvert.SerializeObject(node, settings);
Console.WriteLine("After deserializing:");
Console.WriteLine(json2);
Console.WriteLine();
Console.ReadLine();
}
}
[JsonObject(IsReference = true)]
class Node {
public Node Parent = null;
public List<Node> Children = new List<Node>();
public Node(Node parent) {
this.Parent = parent;
}
public void AddChild() {
this.Children.Add(new Node(parent: this));
}
}
出力はありますか?これを修正する方法はありますか?
私はデシリアライズ後にこれらの参照を修正するために再帰関数を記述します。 –