2013-02-26 94 views
0

我JSON對象在客戶端類似以下內容:爲什麼不JSON反序列化的NameValueCollection中

var myObject = { 
     data1: 1, 
     data2: 5, 
     ....... 
    } 

我將它傳遞給PageMethod,並期待它會被反序列化Dictionary<string, object>。它是正確的。但是當我用PageMethod簽名中的Dictionary替換NameValueCollection時,反序列化失敗。爲什麼?

回答

1

由於頁面方法使用的JavaScriptSerializer無法將此JSON結構反序列化爲弱類型的NameValueCollection。你爲什麼要這樣做,而不是用強類型的字典呢?

+0

對於我的目的'空'作爲空值是足夠的/首選。我試圖編寫緊湊的代碼,當我使用字典時,我需要首先檢查字典是否包含密鑰。 – 2013-02-26 13:13:40

1

NameValueCollection無法像Dictionary一樣被序列化,因爲它沒有實現IDictionary。

您可以將其轉換爲字典,然後嘗試序列化。

+0

好吧,它不是實現IDictionary ...所以呢? – 2013-02-26 13:19:05

+0

所以javascriptserializer無法序列化它 – Manish 2013-02-26 13:28:42

0

你可以嘗試「映射」。在代碼中,您可以使用屬性Coll作爲NameValueCollection,但序列化/反序列化與CollDictionary一起使用。

public NameValueCollection Coll 
{ 
    get 
    { 
     var nvc = new NameValueCollection(); 
     CollDictionary.Keys.ToList().ForEach(a => nvc.Add(a, CollDictionary[a])); 
     return nvc; 
    } 
    set 
    { 
     CollDictionary = value.AllKeys.ToDictionary(k => k, k => value[k]); 
    } 
} 

[JsonProperty(PropertyName = "Coll")] 
public Dictionary<string, string> CollDictionary { get; set; }