DataContractJsonSerializer

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<string, object> Parameters { get; set; } // Can't deserialize this

    [DataMember]
    public Action Action { get; set; }

    [DataMember]
    public User InitiatingUser { get; set; }
}

现在,出于某些未知原因,添加DataContractJsonSerializer can't deserialize JSON into a dictionary(请参阅其他详细信息部分)。
不幸的是,DataContractJsonSerializer也由于超出我的原因而被密封。
我需要一种解决方法,有人知道吗?

最佳答案

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

但是,对于大多数自定义序列化对象也是如此,因此希望这并不奇怪。

但是,现在应该以KeyValuePair的形式读取它,以便您可以尝试一下,看看它是否至少对您反序列化。相反,您将需要一个List<KeyValuePair<>>Dictionary<string,string>将什么转换为JSON:

var dict = new Dictionary<string,string>;
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

关于c# - 如何使用DataContractJsonSerializer对字典进行反序列化?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4199321/

10-10 13:26