OK、私たちは Newtonsoft の JSON.NET 製品を使用しています。これは私がとても気に入っています。ただし、大まかに次のような階層的な場所の単純なクラス構造があります...
public class Location
{
public string Name{ get; set; }
public LocationList Locations{ get; set; }
}
// Note: LocationList is simply a subclass of a List<T>
// which then adds an IsExpanded property for use by the UI.
public class LocationList : List<Location>
{
public bool IsExpanded{ get; set; }
}
public class RootViewModel
{
public LocationList RootLocations{ get; set; }
}
...そして、それらを JSON にシリアル化すると、LocationList クラスの IsExpanded プロパティが除外されることを除いて、すべてうまく機能します。リストの内容のみがシリアル化されます。
今、私が思い描いているのは良いフォーマットです。LocationList
のサブクラスではなく、代わりに の型List<Location>
と呼ばれるプロパティを持つ単なる通常のオブジェクトであるかのように、本質的に同じことです。Items
List<Location>
{
"Locations":
{
"IsExpanded": true,
"Items": [
{
"Name": "Main Residence",
"Locations":
{
"IsExpanded": true,
"Items": [
{
"Name": "First Floor",
"Locations":
{
"IsExpanded": false,
"Items": [
{
"Name": "Livingroom"
},
{
"Name": "Dining Room"
},
{
"Name": "Kitchen"
}
]
},
{
"Name": "Second Floor",
"Locations":
{
"IsExpanded": false,
"Items": [
{
"Name": "Master Bedroom"
},
{
"Name": "Guest Bedroom"
}
]
},
{
"Name": "Basement"
}
]
}
}
]
}
}
また、Newtonsoft の製品が拡張可能であることも理解しています。なぜなら、特定のデータ型に対して独自のカスタム シリアライザーを作成する方法について具体的に述べているからです。ただし、これを行う方法に関する適切なコード例はありません。
私たち (SO コミュニティ) がこれを理解できれば、技術的に上記の形式を使用して、リスト (またはその派生物/類似オブジェクト) の任意のサブクラスをシリアル化できるはずですItems
。がらくたとして紛らわしいので、そもそも設計が貧弱である必要があります!) おそらく、Newtonsoft にそのようなものをシリアライザでネイティブにロールさせることさえできます!
つまり、シリアライザー/デシリアライザーをカスタマイズして、このオブジェクトを別の方法で処理する方法を知っている人はいますか?
M