0

我想要带有 ODataMediaTypeFormatter 的序列化字典 im 模型。

JsonNet 将字典序列化为对象:

{ 
Length: 10,
Weight: 100,
}

ODataMediaTypeFormatter(使用 ODataJsonLight 序列化程序)序列化为空数组:

[
{},
{}
]

ODataMediaTypeFormatter 将 Dictionary 序列化为 KeyValuePair 的集合,并将 KeyValuePair 序列化为空对象。

我尝试覆盖默认格式化程序并使用参数将 Dictionary 转换为 ComplexType,但我在 ODataJsonLight 序列化程序中遇到了 Edm 验证错误(它是 Microsoft.Data.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 回答