2012-02-09 5 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ではまったく機能しません。

今、これらの名前の値のペアを1つのクラスにバインドできますか?これは可能ですか?将来的には

は、10以上からBも属性が、形式は名前と値のペアと同じになります

+0

辞書のような辞書を作成するには、おそらく 'dynamic'キーワードを使用できます。 – NibblyPig

答えて

1

編集:私は申し訳ありませんが、あなたは直列化に望んでいたかのように何らかの形で私はあなたの質問を解釈し、 はデシリアライズしません(しかし、私はそれが良い知識だと思うので、とにかくオリジナルを下に保ちます))。

Attributeではなく、JSON文字列をDictionary<string,string>にデシリアライズしてください。私はそれがうまくいくかもしれない感情を持っています。次に、残りのコードを調整してその辞書を使用するか、Attributeインスタンスのコレクションに変換することができます。


以下(あなたが求めて何の反対だったをシリアライズに関連し、)元の答え。

私はそうは思いませんが、その意図は、クライアント上でこのようにそれを使用する場合:

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

...それはだとして、次に何を後にしていることは、「連想配列」と呼ばれています

...。それは本当に、配列ではないのですが、それはオブジェクトのよう(例えばwindow.onloadwindow["onload"]と同じであるjavascriptのオブジェクトのプロパティを参照するために、これらの2つの方法を提供します)

attributes.color 
attributes.price 

...:これに相当

... Dictionary<string,string>をJSON文字列にシリアル化すると(つまり、AttributeクラスをKeyValuePair<string,string>に変更するか、別の方法でそのような辞書を作成すると、JavaScriptSerializerでこれを達成できます)。

+0

ありがとう! 'Dictionary 'で動作します! – Chintan