2017-01-05 2 views
1

Json 형식의 타사 서비스에서 응답을 받았습니다. 유효성 검사에 실패하면 프로그램이 충돌한다는 점을 제외하면 필드는 거의 동일합니다. json으로는다른 Json 응답을 응답

{ 
    "response": 0, 
    "sites": { 
     "site": { 
      "customer": [{ 
       "validation": { 
        "customer.dob": "dob required", 
        "customer.surname": "surname required" 
       } 
      }] 
     } 
    }, 
    "records": { 
     "insertcount": 0, 
     "deletecount": 0 
    }, 
    "referrals": [] 
} 

그리고

{ 
    "sucession": 0, 
    "sites": { 
     "site": "please try later." 
    }, 
    "records": { 
     "insertcount": 0, 
     "deletecount": 0 
    }, 
    "referrals": [] 
} 

입니다 반환 내가 JSON 위의 온라인 도구를 사용하기위한 클래스를 만든 다음 내가 그것을

RootObject ro = JsonConvert.DeserializeObject<RootObject>(JsonInStringFormat); 

내가 어떻게 할 수 deserilize json으로를 읽으려면 한 클래스가 그에 따라 Json을 처리 할 수 ​​있도록이 빌드? 아니면 같은 일을하는 또 다른 방법이 있습니까? RootObject

public class RootObject 
{ 
    public int response { get; set; } 
    public Sites sites { get; set; } 
    public Records records { get; set; } 
    public List<object> referrals { get; set; } 
} 
이 작동하는 것 같다
+0

당신이 그렇게 왜? –

+0

당신은'dynamic'을 사용할 수 있습니다. http://stackoverflow.com/questions/3142495/deserialize-json-into-c-sharp-dynamic-object –

+1

JSON은 정의 상으로는 "문자열 형식"입니다. 자바 스크립트 리터럴이 될 것입니다. – Jamiec

답변

1
using System.Web.Script.Serialization; 

namespace ThirdPartyJSON 
{ 
    class Program 
    { 
     static void Main() 
     { 
      string jsonString = System.IO.File.ReadAllText("thirdparty.json"); 

      var serial = new JavaScriptSerializer(); 

      var o = serial.Deserialize<Rootobject>(jsonString); 
     } 
    } 

    public class Rootobject 
    { 
     public int response { get; set; } 
     public Sites sites { get; set; } 
     public Records records { get; set; } 
     public object[] referrals { get; set; } 
     public int sucession { get; set; } 
    } 

    public class Sites 
    { 
     public object site { get; set; } 
    } 

    public class Site 
    { 
     public Customer[] customer { get; set; } 
    } 

    public class Customer 
    { 
     public Validation validation { get; set; } 
    } 

    public class Validation 
    { 
     public string customerdob { get; set; } 
     public string customersurname { get; set; } 
    } 

    public class Records 
    { 
     public int insertcount { get; set; } 
     public int deletecount { get; set; } 
    } 
} 

- - 모든 "개체"상속과 같이 JSON 문자열 변수에 개최되는 반환

편집합니다 (JsonInStringFormat주의). Rootobject 클래스에도 'sucession'을 추가했습니다. 이제는 이중 목적입니다. 나는 내가 잘못 대답하면 미안하다. 그냥 도와 주려고.

0

루트 객체가 응답에서 변경된 경우 here과 같이 비 직렬화 결과에 dynamic objects을 사용해야합니다. 귀하의 경우에는

:

C 번호 :

dynamic data = JsonConvert.DeserializeObject(JsonInStringFormat); 
if (data.sucession == 0) //checking the dynamic object for this property 
{ 
    //here you already know "sites" has no values 
    //do what you have to 
} 
else 
{ 
    //success! 
    RootObject ro = JsonConvert.DeserializeObject<RootObject>(JsonInStringFormat); 
    Sites test = ro.sites; //sites values retrieved! 
}