因此,我从google translate API得到的响应如下:
"{\"responseData\": {\"translatedText\":\"Hola Mi nombre es\"}, \"responseDetails\": null, \"responseStatus\": 200}"我的代码看起来像这样:
private string getText(string response)
{
var serializer = new JavaScriptSerializer(new SimpleTypeResolver());
translationReturnObject obj = serializer.Deserialize<translationReturnObject>(response);
return obj.translatedText;
}translationReturnObject的定义如下:
[DataContract]
class translationReturnObject
{
[DataMember(Name = "responseData")]
public string repsonseData { get; set;}
[DataMember(Name = "translatedText")]
public string translatedText { get; set; }
[DataMember(Name = "responseDetails")]
public string responseDetails { get; set; }
[DataMember(Name = "responseStatus")]
public string responseStatus { get; set; }
}我的问题是translatedText没有被正确地反序列化。无论返回的语言是什么(所以我不认为这是一个编码问题),值都是空的。
你知道我做错了什么吗?
发布于 2010-08-12 22:39:20
如果查看返回的JSON,就会发现translatedText是responseData的一个属性。因此,您将需要以下内容:
public class TranslationResponseData
{
public string translatedText { get; set; }
}
public class TranslationReturnObject
{
public TranslationResponseData repsonseData { get; set;}
public string responseDetails { get; set; }
public string responseStatus { get; set; }
}编辑:同样,你也不需要担心DataContract/DataMember。JavaScriptSerializer会将JSON名称映射到公共属性名称。
发布于 2010-08-12 22:41:07
我认为JavaScriptSerializer不能与DataContract和DataMember属性一起工作。您尝试过使用DataContractSerializer类吗?
JavaScriptSerializer根据属性名称本身工作。它被弃用了,但由于某种原因,它在MVC中复活了。DataContractSerializer是随WCF发布的。
https://stackoverflow.com/questions/3468803
复制相似问题