문제

JSON이 다음과 같이 돌아 오게됩니다.

{"responseData": [{"responseData":{"translatedText":"elefante"},"responseDetails":null,"responseStatus":200},{"responseData":{"translatedText":"Burro"},"responseDetails":null,"responseStatus":200}], "responseDetails": null, "responseStatus": 200}

그리고 설정 한 응답자 객체로 구문 분석해야합니다.

    public class ResponseData
    {
        public string translatedText = string.Empty;

        public object responseDetails = null;

        public HttpStatusCode responseStatus = HttpStatusCode.OK;
        public List<ResponseData> responseData { get; set; }
    }

나는 이것처럼 그것을 사로화합니다.

JavaScriptSerializer serializer = new JavaScriptSerializer();
ResponseData translation = 
                    serializer.Deserialize<ResponseData>(responseJson);

그러나 번역 된 텍스트가 항상 비어 있더라도 항상 비어 있습니다.

도움이 되었습니까?

해결책

해당 문자열에 표시된 JSON 객체 그래프에 대해 생각해야합니다.

SO와 같은 제네릭을 사용하여 다른 속성/필드를 가진 물체를 제조하는 유형을 중첩 할 수 있습니다.

 class Response<T>
 {
    public ResponseData<T>[] responseData = new ResponseData<T>[0];
    public HttpStatusCode responseStatus;
    public object responseDetails;
 }

 public class ResponseData<TInternal> {
    public TInternal responseData;
    public HttpStatusCode responseStatus;
    public object responseDetails;
 }

 public class TranslatedText
 {
    public string translatedText;
 }

 [Test]
 public void Sample()
 {
    var input = @"
       { 
       ""responseData"": [{""responseData"": {""translatedText"" : ""elefante"" },          ""responseDetails"":null, ""responseStatus"":200} , {""responseData"": {           ""translatedText"":""Burro"" }, ""responseDetails"":null, ""responseStatus"":200}], 
         ""responseDetails"" : null, ""responseStatus"": 200}
        ";

     var json = new JavaScriptSerializer();
     var response = json.Deserialize<Response<TranslatedText>>(input);
     Assert.AreEqual(response.responseData[0].responseData.translatedText,"elefante");
     Assert.AreEqual(response.responseStatus,HttpStatusCode.OK);

}

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top