NewtonsoftJSONデシリアライズ


83

私のJSONは次のとおりです。

{"t":"1339886","a":true,"data":[],"Type":[['Ants','Biz','Tro']]}

C#用のNewtonsoftJSON.NET逆シリアル化ライブラリを見つけました。私はそれを次のように使用しようとしました:

object JsonDe = JsonConvert.DeserializeObject(Json); 

JsonDeオブジェクトにアクセスしてすべての「タイプ」データを取得するにはどうすればよいですか?ループで試しましたが、オブジェクトに列挙子がないため機能しません。



この質問への答えを見てください:stackoverflow.com/questions/11126242/…–
ディーツ

回答:


133

JSONにあるフィールドを保持するクラスを実装できます

class MyData
{
    public string t;
    public bool a;
    public object[] data;
    public string[][] type;
}

次に、DeserializeObjectの汎用バージョンを使用します。

MyData tmp = JsonConvert.DeserializeObject<MyData>(json);
foreach (string typeStr in tmp.type[0])
{
    // Do something with typeStr
}

ドキュメント:JSONのシリアル化と逆シリアル化


役に立つはずの例を追加しました。「type」がリストのリスト(配列配列)である理由は私には謎ですが、これは指定したjson文字列と一致している必要があります。
Michael Banzon 2013年

1
ご回答ありがとうございます。それは私の問題を解決するのに役立ちました:)
santosh kumar patro 2015

私は失敗していたキャストを使用していましたMyData tmp = (MyData)JsonConvert.DeserializeObject(json);。おかげで、逆シリアル化の汎用バージョンははるかにうまく機能します。:-)
SharpC

わかりました、ここに書きます:dotnet add package Newtonsoft.Jsonusing Newtonsoft.Json;
ダニエレーラ

81

はるかに簡単な解決策:動的タイプの使用

Json.NET 4.0リリース1の時点で、ネイティブの動的サポートがあります。クラスを宣言する必要はありませんdynamic。次を使用するだけです。

dynamic jsonDe = JsonConvert.DeserializeObject(json);

すべてのフィールドが使用可能になります。

foreach (string typeStr in jsonDe.Type[0])
{
    // Do something with typeStr
} 

string t = jsonDe.t;
bool a = jsonDe.a;
object[] data = jsonDe.data;
string[][] type = jsonDe.Type;

ではダイナミックあなたのデータを保持するために、特定のクラスを作成する必要はありません。


10
素敵な答えに私を導入するためのおかげでdynamic):
maialithar

2
間違いなく簡単です。ただし、プロパティが存在するかどうかを簡単に確認できないという欠点があります(例外処理を使用する必要があります)。
Jowen 2014

2
@Jowen例外処理なしでプロパティが存在するかどうかを確認するには、それらの回答を
Yves M.

どうもありがとうございました1 !! 長い間探していた最も簡単なソリューション
Sly_TheKing 2016

9

Newtonsoftのドキュメントに従って、次のように匿名オブジェクトに逆シリアル化することもできます。

var definition = new { Name = "" };

string json1 = @"{'Name':'James'}";
var customer1 = JsonConvert.DeserializeAnonymousType(json1, definition);

Console.WriteLine(customer1.Name);
// James

今では賢いです!;-)しかし、定義があなたの例ほど単純でない場合、それは不器用になります。
Sнаđошƒаӽ

何も知りませんが、この場合definitionはどうすればいいDeserializeAnonymousTypeですか?
Mehdi Dehghani 2017

ほとんどのJSONはそれほど単純なものではないため、これは価値のない例です。私は...もっと密接にネストされたプロパティを持つJSON文字列に似ているという定義を見てみたいと思います
pmfith
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.