トップ回答者
ネストされたJSONデータの読み出しについて

質問
回答
-
変換サービスがあるので使ってみてください。
json2csharp
http://json2csharp.com/質問者さんの書いた JSON 文字列は以下のように変換されます。
public class DetectedLanguage { public string language { get; set; } public double score { get; set; } } public class Translation { public string text { get; set; } public string to { get; set; } } public class RootObject { public DetectedLanguage detectedLanguage { get; set; } public List<Translation> translations { get; set; } }
一番外側の [ ] は配列を表すので、以下のように List<RootObject> にデシリアライズして、
string jsonString = "JSON 文字列"; var result = JsonConvert.DeserializeObject<List<RootObject>>(jsonString);
result[0].translations[0].text で取得できるはずです。
- 回答としてマーク 1414CenterTail 2018年9月17日 22:05
- 回答としてマークされていない 1414CenterTail 2018年9月17日 22:05
- 回答としてマーク 1414CenterTail 2018年9月17日 22:05
すべての返信
-
変換サービスがあるので使ってみてください。
json2csharp
http://json2csharp.com/質問者さんの書いた JSON 文字列は以下のように変換されます。
public class DetectedLanguage { public string language { get; set; } public double score { get; set; } } public class Translation { public string text { get; set; } public string to { get; set; } } public class RootObject { public DetectedLanguage detectedLanguage { get; set; } public List<Translation> translations { get; set; } }
一番外側の [ ] は配列を表すので、以下のように List<RootObject> にデシリアライズして、
string jsonString = "JSON 文字列"; var result = JsonConvert.DeserializeObject<List<RootObject>>(jsonString);
result[0].translations[0].text で取得できるはずです。
- 回答としてマーク 1414CenterTail 2018年9月17日 22:05
- 回答としてマークされていない 1414CenterTail 2018年9月17日 22:05
- 回答としてマーク 1414CenterTail 2018年9月17日 22:05
-
早速のご回答、ありがとうございます。クラスの自動生成サービスまではたどり着いていたのですが、デシリアライズするところで間違っていました。
var result = JsonConvert.DeserializeObject<List<RootObject>>(jsonString);
とすべき所、
var result = JsonConvert.DeserializeObject<RootObject>(jsonString);
としておりました。 無事に解決出来ました。ありがとうございました。
- 編集済み 1414CenterTail 2018年9月17日 22:07
-
> クラスの自動生成サービスまではたどり着いていたのですが、デシリアライズするところで間違っていました。
情報の後出し小出しはここのようなサイトでは NG です。質問する前に知っていたこと・試したことは回答者・閲覧者に提供すべき情報として質問文の中にきちんと書いてください。
今回の場合は、
(1) JSON ⇒ C# クラスの変換サービスまではたどり着いていたこと、
(2) 変換結果を提示すること、
(3) 変換結果を用いてどのようにデシリアライズしようとしたか、できればそのコードを書く、
(4) 上記 (3) の結果がどうなったか、エラーメッセージが出ていたらそれを書く
・・・です。それらは最初の質問に書けたはず。
何故 NG かと言うと、
a) MSDN Forum は技術者同士の情報交換の場として提供されているということで、お互い適切な情報提供を行うのが基本。
フォーラムでご質問頂くにあたっての注意点
https://social.msdn.microsoft.com/Forums/ja-JP/ca9ecfb7-4407-4fcb-b8bd-207d68257e68/12501124571254012521125121239112372360742183938914123671239512?forum=announcejab) 上記 (1) ~ (4) の情報が最初の質問に提供されていれば、回答者・閲覧者は DeserializeObject<T>() の T をどうすべきかと言うとことから考え始めればよい。⇒ 回答者・閲覧者が無駄に時間と労力を費やすことがないよう配慮してください。
c) 情報不足ですと、不足情報を提供してもらうための質問など無駄なやり取りが増えたり、不明なところを想像で回答して想像が間違っていると Q&A が空回りする。
d) 適切な情報が提供されていれば、タイムリーに的を得た回答が得やすいということで、質問者さんにもメリットがあります。
初めて投稿ということで不慣れだったかもしれませんが、もし次回質問する機会がありましたら、上記の点によろしく配慮願います。