DataContractJsonSerializer无法正确序列化字典.
{"abc":"xyz","def":42}
例如,JavaScriptSerializer序列化字典,而DataContractJsonSerializer则提供[{"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
在Serialize/DeSerialize实体并使用JSON.NET时,是否可以覆盖默认的WCF DataContractSerializer行为?
我有以下服务合同来处理City实体.出于设计原因,City实体具有IsReference = true,因此默认的DataContractSerializer会引发错误.
对于"GET"方法,我可以使用JsonConvert.DeserializeObject处理这种情况,但是使用"PUT,POST,DELETE"方法DataContractSerializer优先,并且失败抱怨IsReference实体无法序列化.
我发现这个Post实现IOperationBehavior并提供我自己的Serializer但我不知道如何将Json.NET与此集成.而且我认为应该有更直接的方法.
我很感激有关此方案的任何帮助或指导,或对其他方法的建议.
[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public class CityService
{
[Description("Get all Cities")]
[WebGet(UriTemplate = "")]
public Message Cities()
{
}
[Description("Allows the details of a single City to be updated.")]
[WebInvoke(UriTemplate = "{code}", Method = "PUT")]
public Message UpdateCity(string code, City city)
{
}
}
Run Code Online (Sandbox Code Playgroud)
非常感谢
霍山