我有以下扩展方法,用于在c#中反序列化json。
public static T DeserializeJson<T>(string response)
where T : class
{
var s = new DataContractJsonSerializer(typeof(T));
try
{
using (var ms = new MemoryStream())
{
byte[] data = System.Text.Encoding.UTF8.GetBytes(response);
ms.Write(data, 0, data.Length);
ms.Position = 0;
return (T)s.ReadObject(ms);
}
}
catch
{
return default(T);
}
}
这是正常的。
数据合约如下:
[DataContract]
public class ResponseProps
{
[DataMember(Name = "status", Order = 0)]
public string ResponseCode { get; set; }
[DataMember(Name = "lead_id", Order=1)]
public string LeadId { get; set; }
[DataMember(Name = "price", Order=2)]
public decimal Price { get; set; }
[DataMember(Name = "redirect_url", Order = 3)]
public string RedirectUrl { get; set; }
[DataMember(Name = "errors", Order = 4)]
public string Errors { get; set; }
}
但是在某些情况下我收到错误并且反序列化失败。
问题看起来是由于某些回复中的数据被发回,我显然没有正确处理。以下是导致此问题的数据:
{"status":4,"errors":[{"Duplicate Application":"Duplicate Application"}]}
有人知道我如何解决这个问题吗?
答案 0 :(得分:1)
ResponseProps.Errors
的类型应为List<Dictionary<string, string>>
,而不是字符串。