我有以下模型:
[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"}
简而言之,问题就在这里。
一些有用的后续链接
关于c# - 如何使用 DataContractJsonSerializer 反序列化字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4199321/