如何在Asp.Net中使用ODataMediaTypeFormatter序列化Dictionary

时间:2013-07-18 21:02:24

标签: c# asp.net odata

我想使用ODataMediaTypeFormatter进行serialaze Dictionary im模型。

JsonNet将字典序列化为对象:

{ 
Length: 10,
Weight: 100,
}

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

[
{},
{}
]

ODataMediaTypeFormatter将字典序列化为KeyValuePair和KeyValuePair的集合作为空对象。

我尝试覆盖默认格式化程序并使用参数将Dictionary转换为ComplexType,但我在ODataJsonLight序列化程序中有Edm验证错误(它是Microsoft.Data.Edm的一部分)。

有没有人有任何想法如何序列化字典?

1 个答案:

答案 0 :(得分:1)

字典不是OData中的标准数据类型。因此,Web API OData不支持原生。然而,您可以将它们建模为keyvalue对(复杂类型)的集合,但我建议您为此声明一个特殊类型。

无论如何,建模代码将是(假设你有Dictionary<string,string>),

Type kvpType = typeof(KeyValuePair<string, string>);
var kvpEdmType = builder.AddComplexType(kvpType);
kvpEdmType.AddProperty(kvpType.GetProperty("Key"));
kvpEdmType.AddProperty(kvpType.GetProperty("Value"));