提问人:morpheus 提问时间:12/30/2010 最后编辑:jordanhill123morpheus 更新时间:5/27/2016 访问量:50861
有什么方法可以使 DataContractJsonSerializer 正确序列化字典?
Any way to make DataContractJsonSerializer serialize Dictionaries properly?
问:
DataContractJsonSerializer 无法正确序列化字典。
而 JavaScriptSerializer 序列化 Dictionaries 例如,
DataContractJsonSerializer 提供。{"abc":"xyz","def":42}
[{"Key":"abc","Value":"xyz"},{"Key":"def","Value":42}]
这确实是有问题的,我想知道如何在我的 WCF 服务中正确序列化 Dictionary 对象。我正在寻找一种需要最少努力的解决方案。
编号: http://msdn.microsoft.com/en-us/library/bb412170.aspx
这是我最终用来在 WCF 中正确排列字典的解决方法:http://social.msdn.microsoft.com/forums/en-US/wcf/thread/765f1569-0422-4471-8ec2-1d03b2026771
答:
不幸的是,这似乎是设计使然,根据 http://msdn.microsoft.com/en-us/library/bb412170.aspx 的“集合、字典和数组”部分
所有集合、字典和数组在 JSON 中都表示为数组。
尽管在大多数情况下,这将导致重大重写,因此不可行,但您可以让 WCF 服务接口接受并返回,在这种情况下,您可以完全控制序列化。这样,您可以使用 、 JSON.NET 或 ServiceStack.JSON 来执行实际的序列化,并且这些序列化程序实际上以更明智的方式处理字典。Stream
JavaScriptSerializer
评论
Stream
DataContractJsonSerializerSettings
现在拥有该属性,它以您期望的方式序列化字典。UseSimpleDictionaryFormat
评论
使用 DataContractJsonSerializerSettings(自 .NET 4.5 起可用)可以为您执行此操作:
var serializer = new DataContractJsonSerializer(typeOfObj, new DataContractJsonSerializerSettings()
{
UseSimpleDictionaryFormat = true
});
评论