JSON Google Ajax Translation API를 사로 잡으십시오
-
05-07-2019 - |
문제
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);
}
제휴하지 않습니다 StackOverflow