ノードに子ポインターと親ポインターの両方があるツリー構造があります。これを適切にシリアル化するのにいくつか問題があります (これは構成に使用されるため、操作/構成マネージャーにとってある程度読み取り可能である必要があります)。シリアル化規則と属性のさまざまな組み合わせを試した後も、まだ行き詰まっています。
私のタイプは次のようになります。
public class NestedConfigurationTree<T> where T : class
{
public InternalNode<T> _root { get; set; }
public class InternalNode<TValue> where TValue : class
{
public Dictionary<string, InternalNode<TValue>> _children { get; set; }
public InternalNode<TValue> _parent { get; set; }
public TValue _value { get; set; }
}
}
循環参照 ( [JsonObject(IsReference = true)]
) を許可すると、各ノードは次のような JSON を取得します。
"$id": "3",
"_children": {
"ConfigurationItem": {
"$id": "4",
"_children": {},
"_parent": {
"$ref": "3"
},
"_value": "Some value"
}
},
これは明らかにエンド ユーザーを混乱させ、$id と _parent のようなものを望んでいません。親はドキュメント構造から明らかであるため、シリアル化を回避して、ロード時に何らかの方法で再作成できますか?
また、公共の財産を持つことを避けることは可能ですか?最初はフィールドとして書きましたprivate readonly
が、シリアライザーはそれらをすべて無視しました。