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

标签 c# .net json deserialization

我有以下模型:

[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/

相关文章:

c# - 异步发送电子邮件和处理

.net - 如何使用 nhibernate 更快地插入?

javascript - 创建回调以从函数返回数组

javascript - 如何在knockoutjs中使用原型(prototype)对象的实例而不是JSON

c# - 是否可以在某个元素之后对 List 进行排序?

c# - 以列表的形式访问所有可用的 ViewComponents

c# - 不能在 LINQ 中隐式转换类型

javascript - 使用 JavaScript 的 ASP/ASPX 标签可见性

c# - 为什么我在 Vista 上可能会遇到 DLL 未找到异常,但在 XP 上却不会?

xml - 使用 Moxy 作为默认的 JAXB 实现