2013-07-18 47 views
0

我想用ODataMediaTypeFormatter对字典im模型进行serialaze。如何在Asp.Net中使用ODataMediaTypeFormatter对字典进行序列化

JsonNet序列字典作为对象:

{ 
Length: 10, 
Weight: 100, 
} 

ODataMediaTypeFormatter(与ODataJsonLight串行器)序列为空数组:

[ 
{}, 
{} 
] 

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

我尝试覆盖默认格式化程序并将字典转换为复杂类型的参数,但我有在ODataJsonLight序列化器(它是Microsoft.Data.Edm的一部分)Edm验证错误。

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

+0

这将是不可能得到的OData来了解您的'object',除非您使用接口或抽象类值。例如'KeyValuePair ' –

回答

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")); 
+0

该方法适用于'KeyValuePair ',但不适用于'KeyValuePair '。 –

+0

适用于KeyValuePair 我猜测它是因为OData约定模型构建器不适用于不可变类型。 –

相关问题