0

ODataMediaTypeFormatter でディクショナリ im モデルをシリアライズしたい。

JsonNet は辞書をオブジェクトとしてシリアル化します。

{ 
Length: 10,
Weight: 100,
}

ODataMediaTypeFormatter (ODataJsonLight シリアライザーを使用) は、空の配列としてシリアル化します。

[
{},
{}
]

ODataMediaTypeFormatter は、ディクショナリを KeyValuePair のコレクションとしてシリアル化し、KeyValuePair を空のオブジェクトとしてシリアル化します。

デフォルトのフォーマッタをオーバーライドして、ディクショナリをパラメータで ComplexType に変換しようとしましたが、ODataJsonLight シリアライザ (Microsoft.Data.Edm の一部) で Edm 検証エラーが発生しました。

辞書を正常にシリアル化する方法を知っている人はいますか?

4

1 に答える 1

1

辞書は、OData の標準データ型ではありません。そのため、Web API OData はそれらをネイティブでサポートしていません。ただし、それらをキーと値のペアのコレクション(複合型)としてモデル化できますが、そのために特別な型を宣言することをお勧めします。

とにかく、モデリングのコードは(あなたが持っていると仮定してDictionary<string,string>)、

Type kvpType = typeof(KeyValuePair<string, string>);
var kvpEdmType = builder.AddComplexType(kvpType);
kvpEdmType.AddProperty(kvpType.GetProperty("Key"));
kvpEdmType.AddProperty(kvpType.GetProperty("Value"));
于 2013-07-18T22:31:26.933 に答える