2017-09-29 1 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; 

은 ResponseModel 밖으로 data 속성의 인스턴스를 얻을 수 있습니다.

당신은 JSON에서이를 공제 할 수 있습니다

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

이 JSON을 받게됩니다 유형은 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을 복사 할 경우 올바른 클래스를 생성 2015-2017을 (에서 할 수있는 멋진 트릭 Ctrl 키 + c).

Visual Studio에서 새 클래스를 만들고 클래스 안에 한 번만 수정 메뉴로 이동 -> 선택하여 붙여 넣기 -> JSON As Class로 붙여 넣습니다.

Steps to generate json class

이 당신을 위해 그 JSON에 대한 C#을 객체를 생성하고 모든 번거 로움 :

+0

아주 좋은 트릭을 절약 할 수 있습니다. json2csharp와 같았지만 IDE에서는 같았습니다. 감사 – OrcusZ

관련 문제