Ich versuche, einen Baum zu deserialisieren, wo jeder Knoten einen Verweis von sowohl seinem übergeordneten als auch seinem untergeordneten Knoten hat. Das Serialisieren des Baums funktioniert problemlos, aber das Deserialisieren des Baums behält die übergeordnete Referenz nicht bei. Stattdessen wird es eine Null.C# Doppelt verknüpfte Baumdeserialisierungsproblem
Was, was ich versuche vereinfachte zu tun:
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));
}
}
Der Ausgang ist dies:
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": []
}
]
}
Ist das ein Fehler in Json.net? Gibt es eine Möglichkeit, das zu beheben?
Ich würde eine rekursive Funktion schreiben, um diese Verweise nach Deserialisieren zu beheben. –