如何使用DataContractJsonSerializer反序列化字典?

我有以下型号:

[DataContract] public class MessageHeader { private Guid? messageId; public Guid MessageId { get { if (messageId == null) messageId = Guid.NewGuid(); return messageId.Value; } } [DataMember] public string ObjectName { get; set; } [DataMember] public Dictionary Parameters { get; set; } // Can't deserialize this [DataMember] public Action Action { get; set; } [DataMember] public User InitiatingUser { get; set; } } 

现在由于某种未知原因, DataContractJsonSerializer无法将JSON反序列化为字典 (请参阅其他详细信息部分)。
不幸的是,DataContractJsonSerializer也因为我之外的原因而被封存。
我需要一种绕过它的方法,有没有人有线索?

由于javascript中没有字典类型,因此将JSON解析为一个很难。 你要做的就是自己写一个转换器。

但是,在大多数自定义序列化对象上也是如此,所以希望这并不是什么大惊喜。

现在它应该作为KeyValuePair读入,所以你可以试试,看看它是否至少为你反序列化。 相反,您需要List>

什么是Dictionary转换为JSON:

 var dict = new Dictionary; dict["Red"] = "Rosso"; dict["Blue"] = "Blu"; dict["Green"] = "Verde"; [{"Key":"Red","Value":"Rosso"}, {"Key":"Blue","Value":"Blu"}, {"Key":"Green","Value":"Verde"}] 

从javascript到JSON的相同关联:

 var a = {}; a["Red"] = "Rosso"; a["Blue"] = "Blu"; a["Green"] = "Verde"; {"Red":"Rosso","Blue":"Blu","Green":"Verde"} 

简而言之,这就是问题所在。


一些有用的后续链接

http://my6solutions.com/post/2009/06/17/The-serialization-and-deserialization-of-the-generic-Dictionary-via-the-DataContractJsonSerializer.aspx

http://msdn.microsoft.com/en-us/library/system.runtime.serialization.collectiondatacontractattribute.aspx