26

人がリストまたはコレクションをサブクラス化した後、サブクラスに追加のプロパティを追加する場合のために、カスタムJsonConverterを作成しようとしています(ここを参照)。JSON.NETの現在の実装は、リストを子オブジェクトの配列に変更するだけで、追加されたすべてのプロパティを無視します。したがって、オブジェクトをリストではないかのように扱い、他のすべてを通常どおりにシリアル化する新しいJsonConverterを作成しますが、シリアル化に「_Items」という新しいプロパティを追加します。ここで、データの実際の配列は次のようになります。保存されます。

これで、特定のListサブクラスに対してこれを正確に実行するクラスを既に作成しましたが、すべてのプロパティを1つずつ手動で指定する必要がありました。しかし、これを通常のオブジェクトとして扱うコンバーターを作成し、手動でアイテムを処理できれば、私は金色になります。別のクラスの半分(またはそれ以上!)を複製することになってもかまいませんが、これらの場合に再利用可能なコンバーターを作成したいと思います。しかし、私が言ったように、私は開始するデフォルトのコンバーターを見つけることができません。

だから...誰かがそれがどこにあるか知っていますか?

4

3 に答える 3

16

JSON.NET には「既定のコンバーター」はありません。

JsonSerializerInternalWriterクラスを調べることができる場合は、SerializeValueメソッドを見てください。その中で、上部に「コンバーターの検索と実行」フェーズがあります。ただし、一致するコンバーターがない場合は、コントラクト型のシリアル化 (switch ステートメント) に頼ります。

エンティティで拡張されたカスタム シリアライゼーションを使用してジェネリック コントラクト シリアライゼーション (通常どおりにオブジェクトを解析するなど) を実行できる方法 (正しい方法または優雅なハック) が見つかりませんでした (これは、あなたがしようとしていると思います)。行う)。

于 2013-09-11T19:59:02.503 に答える