5

私は次のモデルを持っています:

[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も、私を超えた理由で封印されています。
私はそれを回避する方法が必要です、誰かが手がかりを得ましたか?

4

1 に答える 1

5

javascriptには辞書型がないため、JSONを1つに分解するのはかなり困難です。あなたがしなければならないことはあなた自身でコンバーターを書くことです。

ただし、これはほとんどのカスタムシリアル化オブジェクトにも当てはまります。したがって、それが大きな驚きではないことを願っています。

ただし、KeyValuePairとして読み込む必要があるので、それを試して、少なくとも逆シリアル化されているかどうかを確認してください。むしろ、あなたはList<KeyValuePair<>>

JSONの場合のDictionary<string,string>変換:

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

于 2010-11-17T04:20:22.577 に答える