3

JSON が次のように返されます。

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

そして、それを解析して、セットアップした ResponseData オブジェクトにする必要があります。

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);

しかし、翻訳されたテキストは常に空です。

4

1 に答える 1

4

その文字列で表される JSON オブジェクト グラフについて考える必要があります。

次のようなジェネリックを使用して、異なるプロパティ/フィールドを持つオブジェクトを逆シリアル化するための型をネストできます。

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);
}
于 2008-10-05T15:22:55.517 に答える