こんにちは。
windowsフォームでOpenFileDialogでjsonファイルを選択して読み込みグリッドビューに表示したいと思っています。
読み込むjsonが決まっていれば良いのですが中身が固定ではないため、それぞれにあったカラムを用意したいと思います。
そこでjsonのキー値をカラム名にすべく取得したいのですが入れ子になっている部分のプロパティ名が取れません。
中身が固定ではないためキー値を直接指定するようなソースではないものを探しています。
ネットを参考に以下のコードを書きました。
JTokenTypeによってそのままプロパティ名を出力するか更に掘り下げるか決めます。
C#
1// reader.ReadToEnd()でjsonファイルを読み込む 2JObject obj = JObject.Parse(reader.ReadToEnd()); 3 4List<string> keys = getValue(obj); 5 6 private List<string> getValue(JObject jObj) 7 { 8 List<string> plist = new List<string>(); 9 10 var jobj = jObj.Children(); 11 12 foreach (JToken jt in (JEnumerable<JToken>)jobj) 13 { 14 if (JTokenType.Object != jt.Type) 15 { 16 if (JTokenType.Property == jt.Type) 17 { 18 var jp = (JProperty)jt; 19 plist.Add(jp.Name); 20 } 21 else if(JTokenType.Array == jt.Type) 22 { 23 foreach(JToken JArr in jt.ToArray<JToken>()) 24 { 25 getValue((JObject)JArr); 26 } 27 } 28 else 29 { 30 plist.Add(jt.ToString()); 31 } 32 } 33 else 34 { 35 getVlue((JObject)jt); 36 } 37 } 38 return plist; 39 }
しかしitemId01,itemId02,itemId03という風に取れて欲しかったのですが。下記の”items”という値しか取れませんでした。
JTokenTypeがプロパティで取れているようでした。
ネストしている部分がJTokenType.Arrayと認識されるには何か条件があるのでしょうか?
またjsonのキー値をネストにかかわらず全て取得する方法があればどうかご教授お願いします。
json(例)
1{ 2 "items": [ 3 { 4 "itemId01": "item01", 5 "itemName01": "商品01" 6 }, 7 { 8 "itemId02": "item02", 9 "itemName02": "商品02" 10 }, 11 { 12 "itemId03": "item03", 13 "itemName03": "商品03" 14 } 15 ] 16}
追記
Json.NET6.0(ラインタイムバージョン4.0.30319)を利用しています。
jsonの内容にかかわらずプロパティ名が取れるような方法を探しています。上記の例ではitemid01やitemnameという要素がありますが、あくまで例であり、それらキー値がわからなくてもネストしているか判断できるような方法をご存知ないでしょうか。。
回答1件
あなたの回答
tips
プレビュー