2017-09-29 17 views
0

REST APIからのレスポンスで、以下のJSONを取得しています。JSONをc#でデシリアライズできません。

{ 
    "data":{ 
     "id":123, 
     "zoneid":"mydomain.com", 
     "parent_id":null, 
     "name":"jaz", 
     "content":"172.1 6.15.235", 
     "ttl":60, 
     "priority":null, 
     "type":"A", 
     "regions":[ 
     "global" 
     ], 
     "system_record":false, 
     "created_at":"2017-09-28T12:12:17Z", 
     "updated_at":"2017-09-28T12:12:17Z" 
    } 
} 

以下のコードを使用して解決しようとしましたが、正しくデシリアライズされません。

var model = JsonConvert.DeserializeObject<ResponseModel>(response);   

以下はJSONレスポンスで受け取ったフィールドのクラスです。

public class ResponseModel 
{ 
    public int id { get; set; } 
    public string zone_id { get; set; } 
    public int parent_id { get; set; } 
    public string name { get; set; } 
    public string content { get; set; } 
    public int ttl { get; set; } 
    public int priority { get; set; } 
    public string type { get; set; } 
    public string[] regions { get; set; } 
    public bool system_record { get; set; } 
    public DateTime created_at { get; set; } 
    public DateTime updated_at { get; set; } 

} 

何が欠けていますか?

答えて

2

ラッパークラスがありません。

public class Wrapper 
{ 
    public ResponseModel data {get;set} 
} 

してから実行します。

var model = JsonConvert.DeserializeObject<Wrapper>(response).data; 

dataプロパティからあなたのResponseModelのインスタンスを取得します。

あなたは、JSONからこれを差し引くことができます。このJSONを受け取ることになります

{ "data": 
    { "id":123, /*rest omitted */ } 
} 

タイプはdataというプロパティを持っている必要があります。提案されたWrapperクラスは、その型として機能します。

2

json2csharpウェブサイトによると、あなたのモデルは間違っているようです。この方法を試してください。

public class ResponseModel 
{ 
    public int id { get; set; } 
    public string zoneid { get; set; } 
    public object parent_id { get; set; } 
    public string name { get; set; } 
    public string content { get; set; } 
    public int ttl { get; set; } 
    public object priority { get; set; } 
    public string type { get; set; } 
    public List<string> regions { get; set; } 
    public bool system_record { get; set; } 
    public DateTime created_at { get; set; } 
    public DateTime updated_at { get; set; } 
} 

public class RootObject 
{ 
    public ResponseModel data { get; set; } 
} 
1

あなたのモデルは、あなたの応答と一致していない - それはdataプロパティと一致します。単にここ

public class ResponseData 
{ 
    public ResponseModel Data {get; set; { 
} 

、その後

var model = JsonConvert.DeserializeObject<ResponseData>(response); 
1

あなたはあなただけのJSON(Ctrlキーをコピーする場合、それが正しいクラスを生成し、Visual Studioの2015年から2017年に行うことができますクールなトリックの周りに別のオブジェクトをラップ+ c)。

ビジュアルスタジオで新しいクラスを作成し、クラス内に一度作成する必要があります。編集メニュー - >ペースト特殊 - > JSON As Classをペーストします。

Steps to generate json class

これはあなたのためにそのJSONのためのC#のオブジェクトを生成し、あなたのすべての面倒:)

+0

非常に良いトリックを保存します。 json2csharpと同じでしたが、IDEにありました。ありがとう – OrcusZ

関連する問題