2012-02-09 84 views
6

我目前正在使用json.net!我知道如何反序列化json數據以及如何映射我們的類。現在我渴望一些疑問!這可能在JSON中嗎?

假設我jsonstrings是

"attributes":{ 
      "color":"Brown", 
      "condition":"Used", 
      "currency":"USD", 
      "price":"10500", 
      "price_display":"$10,500", 
     } 

和我的屬性類(中,我想反序列化上面的字符串)是

Public class Attribute 
{ 
     public string name{ get; set; } 
     public string value{ get; set; } 
} 

現在,我使用下面的代碼進行反序列化!

JavaScriptSerializer ser = new JavaScriptSerializer(); 
<classname> p = ser.Deserialize<classname>(jsonString); 

很明顯,這段代碼根本不適用於上面的jsonstring。

現在我怎樣才能在一個類中綁定這些名稱值對?這可能嗎 ?

今後,屬性可能B一次以上10,但格式將是相同的名稱值對

+0

您可以使用'dynamic'關鍵字創建字典詞典,例如字典 NibblyPig 2012-02-09 10:46:15

回答

1

編輯:我很抱歉,但不知何故,我理解你的問題,如果你想連載,而不是反序列化(但我會保持原來的下面,因爲我認爲這是很好的知識:))。

嘗試將您的JSON字符串反序列化爲Dictionary<string,string>而不是您的Attribute。我有預感它可能會奏效。然後,您可以調整剩餘的代碼以使用該字典,或者可以將其轉換爲您的Attribute實例的集合。


原來的答案(相關序列化,這是你問的對面)以下。

我不這麼認爲,但如果其目的是用它在客戶端上這樣說:

attributes["color"] // returns Brown 
attributes["price"] // returns 10500 

...那麼你就被稱爲「關聯數組」後,有什麼,因爲它是相當於此:

attributes.color 
attributes.price 

...,因爲它不是一個真正的陣列,但它是一個對象(JavaScript提供這兩種方式來引用對象屬性;例如window.onload相同window["onload"])...

...如果您將Dictionary<string,string>序列化爲JSON字符串(換句話說,將您的Attribute類更改爲KeyValuePair<string,string>,或以其他方式創建此類字典,則可以使用JavaScriptSerializer實現此目的。

+0

謝謝!它適用於'Dictionary '! – Chintan 2012-02-09 11:07:25