わからないこと
C#にてトップクラスが配列になってしまったJsonのデシリアライズ。
例
以下のようなJsonをデシリアライズしようとしていますがうまくいきません。
Json
1コードの表示(ブロック) 2[ 3 {"name":"value"}, 4 {"data":"str"} 5]
※最初が無名の配列なのは間違いではありません。
モデルも用意したいのですがリストに当たる部分が空白のためなんと書いたら良いのかわかりません。
デシリアライズについての記事は一通り探しましたが、答えになっているものが見つかりませんでした。
試したこと
配列にせずにデシリアライズこれはうまくいきませんでした。
宜しくお願い致します。
https://teratail.com/questions/113898
質問に書かれている JSON は形式が正しくないようです。見直していただけませんか。(カンマが不足。value_a ~ _c の書き方・・・例えば文字列なら " で囲うとか)
シリアライザ / デシリアライザには何を使うのですか。C# で使えるものはいろいろあるので、それを指定してもらえないと話が進められないのですが。
返信ありがとうございます。
上の方のものも確認したのですが、質問に答えておらず、結局⚪︎⚪︎⚪︎⚪︎に何を入れたらいいのかを示していないため分からず出来ませんでした。
デシリアイズはNewtonsoft.Json使っています。
質問に書かれている JSON は形式が正しくないようです。見直していただけませんか。
すみません、Jsonを修正しました。
質問に答えていますよ。
Newtonsoft.Json に翻訳するなら JsonConvert.DeserializeObject<List<個々の型>> です。
この形で使うなら、個々の型は自分で定義する必要があります。
定義するのが面倒であれば匿名型や dynamic を使う方法もあります。
いえそこではなくて、レスポンスのJsonを格納するクラスの「ここに書くべき名前が分からない」のとこです。自分もここは何書いたらよいのか分からないのです。
List<個々の型> です。
List<個々の型> list = JsonConvert.DeserializeObject<List<個々の型>>(json);
C# は型推論してくれるので、次のようにしても受け取ることができます。
var list = JsonConvert.DeserializeObject<List<個々の型>>(json);
それと、どこのマルチポストと勘違いされているのかわかりませんが、「〇〇〇〇」も「ここに書くべき名前」も初出なので、まずそこを説明すべきです。
また、マルチポスト先の URL を質問に貼ってください。
> ここに書くべき名前が分からない
そもそもが違うんです
リストを持ったモデルクラスを用意してデシリアライズするんじゃなくて
リストの要素のモデルクラスを用意して、そのクラスのList<>としてデシリアライズするんだよ
って回答です
> Zuishinさん
修正依頼の一番最初のURLです
皆さん質問にお答えしていただきありがとうございます。
Zuishinさんの書き方で無事デシリアライズすることができました。私の説明不足で多くの方の手を煩わせてしまい大変申し訳ありませんでした
JSON 文字列は [{"name":"value"},{"data":"str"}] ではなくて、[{"name":"value", "data":"str"}] ではないのですか? 前者でもデシリアライズはできますが・・・
SurferOnWwwさん すみません後者でした・・・
では、質問者さんがどのように解決したかを質問者さんが回答欄に書いてこのスレッドはクローズしてください。
ozwk さん、ありがとうございます。その部分についてはリンク先も答えているし、私も書いたので、その部分ではないことを指しているのならば説明が必要という意味でした。
いまは解答を書ける環境にないので後ほど書かせていただきます
了解しました。必ずお願いしますね。その際、質問の JSON 文字列も正しいものに訂正お願いします。
回答1件
あなたの回答
tips
プレビュー