任何方式使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
属性,它按您期望的方式序列化字典。