2017-08-09 10 views
-4

私はキーが異なり、C#.netで辞書に格納されているjsonを読む必要があります。私はNewtonsoft jsonを使用しています。私は以下のようにデシリアライズしています。ダイナミックJsonを読む

var inputData = JsonConvert.DeserializeObject<dynamic>(myObj) 

キーが固定されている場合、以下のようにできます。

var val = inputData.Account; 

ただし、ここでのキーは動的です。以下は私のjsonデータです。

{ 
    "data": { 
       "Account": "150.80", 
       "Name": "XYZ", 
       "Description": "Some Value" 
      } 
} 

ここでは、名前の値のペアが変更される可能性があります。つまり、以下のようにもなります。

{ 
     "data": { 
        "Cost": "154.80", 
        "Type": "S1234", 
        "Period": "Some Value" 
       } 
} 

ダイナミックキーにアクセスして辞書に格納する方法。

+0

JSON.Netを使用すると、情報を動的辞書にデシリアライズできます。 – code4life

+1

[JSONをC#の動的オブジェクトにデシリアライズしますか?](https://stackoverflow.com/questions/3142495/deserialize-json-into-c-sharp-dynamic-object) – Adam

答えて

1

EDIT:それはおそらく一部便利な詳細を持っているので、この答えは、以前の投稿質問ではなく、新しく改訂された問題のためだった...私は、それを残しています。

これを行うにはJson.NETを使用することをおすすめします。

jsonデータのフィールドが常にdataである場合、かなり予測可能なコードを記述してdataの内容を辞書に出力できます。私の頭の上オフ

、私はおそらく種類のこのような匿名型ベースのデシリアライゼーションのために行くだろう:

var json = @"{ 
""data"": { 
      ""Account"": ""150.80"", 
      ""Name"": ""XYZ"", 
      ""Description"": ""Some Value"" 
      } 
}"; 

var schema = new { data = new Dictionary<string, object>()}; 
var result = JsonConvert.DeserializeAnonymousType(json, schema); 

あなたはその辞書を取得するためにresult.dataに到達する必要があると思います。

あなたはまた、単に直接dataから値を引き出すためにJObjectを使用することができますが、おそらくそれは一種の、このように起こってダブル呼び出し、だろうので、辞書にそのデータを解析する必要があります:

var jobj = JObject.Parse(json); 
var data = jobj["data"]; 
var dict = JsonConvert.DeserializeObject<Dictionary<string, object>> 
       (data.ToString()); 

もっと効率的にこれを行う方法はもっと多いでしょう。私が言ったように、これらはちょうど私の頭の上のアイデアです。

+0

Thanks @ code4life。あなたの答えは完璧で、私の要求に合っています。しかし、なぜ他の人が理解できず、私の質問に投票できなかったのか分かりません。私はインターネットで私の質問を参照しました、答えは利用できないので私はここに私の質問を掲載 – User