我正在尝试反序列化来自 google api 的 json 响应,所以我想我应该定义几个类来帮助它:
[DataContract]
public class DetectionResult:ResponseData
{
[DataMember(Name="language")]
public string Language
{ get; set; }
[DataMember(Name="isReliable")]
public bool IsReliable
{ get; set; }
[DataMember(Name="confidence")]
public double Confidence
{get;set;}
}
[DataContract]
public abstract class ResponseData
{
[DataMember(Name = "error")]
public TranslationError Error
{ get; set; }
}
[DataContract]
public class TranslationError
{
[DataMember(Name="code")]
public int Code
{ get; set; }
[DataMember(Name="message" )]
public int Message
{ get; set; }
}
[DataContract]
[KnownType(typeof(DetectionResult))]
public class RequestResult
{
[DataMember(Name="responseStatus")]
public int ResponseStatus
{ get; set; }
[DataMember(Name="responseDetails")]
public string ResponseDetails
{ get; set; }
[DataMember(Name = "responseData")]
public ResponseData Response
{ get; set; }
}
提出请求后我得到的答复是:
{"responseData": {"language":"en","isReliable":false,"confidence":0.114892714}, "responseDetails": null, "responseStatus": 200}
并使用此代码对其进行反序列化:
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
using (Stream stream = response.GetResponseStream())
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(RequestResult));
RequestResult result = (RequestResult)serializer.ReadObject(stream);
stream.Close();
}
但我收到一个异常,指出“无法创建抽象类”。它不应该知道检测结果类并正确反序列化它吗?
在您的响应数据中,无法推断具体类型。响应中未指定要反序列化的类型。
来自 MSDN:
为了保留类型标识,将复杂类型序列化为 JSON 时
可以添加“类型提示”,解串器会识别该提示并
采取适当的行动。 “类型提示”是一个 JSON 键/值对,其中包含
“__type”的键名称(两个下划线后跟单词“type”)。
该值是以下形式的 JSON 字符串
“DataContractName:DataContractNamespace”(第一个之前的任何内容
冒号是名称)。使用前面的例子,“Circle”可以是
连载如下。
http://msdn.microsoft.com/en-us/library/bb412170.aspx http://msdn.microsoft.com/en-us/library/bb412170.aspx
请参阅与多态性相关的部分。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)