任何方式使DataContractJsonSerializer正确地序列化字典?

DataContractJsonSerializer无法正确序列化字典。

而JavaScriptSerializer将字典序列化为{"abc":"xyz","def":42} ,DataContractJsonSerializer给出了[{"Key":"abc","Value":"xyz"},{"Key":"def","Value":42}]代替。

这是真的有问题,我想知道如何正确序列化Dictionary对象在我的WCF服务。 我正在寻找一个解决scheme,将需要最less的努力。

ref: 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

使用DataContractJsonSerializerSettings (自.NET 4.5起可用)可以为您做到这一点:

 var serializer = new DataContractJsonSerializer(typeOfObj, new DataContractJsonSerializerSettings() { UseSimpleDictionaryFormat = true }); 

不幸的是,根据http://msdn.microsoft.com/en-us/library/bb412170.aspx中的; “Collections,Dictionaries and Arrays”部分,这似乎是通过devise

所有集合,字典和数组都以JSONforms表示为数组。

虽然这在大多数情况下会导致重大的重写,因此不可行,您可以让您的WCF服务接口接受并返回Stream在这种情况下,您可以完全控制序列化。 这样,您可以使用JavaScriptSerializer , JSON.NET或ServiceStack.JSON来执行实际的序列化,而这些序列化程序实际上是以更合理的方式处理字典。

DataContractJsonSerializerSettings现在具有UseSimpleDictionaryFormat属性,它按您期望的方式序列化字典。