我有以下模型:

[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无法将json当作词典 (请参阅其他详细信息部分)。
不幸的是,Datacontractjsonserializer也因超出我的原因而被密封。
我需要一种解决方案的方法,有人知道吗?

有帮助吗?

解决方案

由于JavaScript中没有字典类型,因此很难将JSON Deparse纳入其中。您要做的就是自己写一个转换器。

但是,在大多数自定义序列化对象上也是如此,因此希望这并不令人惊讶。

但是,现在它应该作为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-andialization-and-deserialization-of-the-generic-dictionary-via-the-datacontractjsonserializer.aspx

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top