我不能去除这个Json结果
我有这个代码
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
try
{
WebResponse response = request.GetResponse();
using (Stream responseStream = response.GetResponseStream())
{
using (TextReader reader = new StreamReader(responseStream, true))
{
valor = reader.ReadToEnd();
}
using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(valor)))
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(List<ApiData>));
List<ApiData> obj = (List<ApiData>)serializer.ReadObject(stream);
}
}
}
catch (WebException ex)
{
WebResponse errorResponse = ex.Response;
using (Stream responseStream = errorResponse.GetResponseStream())
{
StreamReader reader = new StreamReader(responseStream, Encoding.GetEncoding("utf-8"));
String errorText = reader.ReadToEnd();
}
throw;
}
但结果obj为null
ApiData示例
[DataContract]
public class ApiData
{
[DataMember(Order = 1)]
public string coArt { get; set; }
[DataMember(Order = 2)]
public string artDes { get; set; }
[DataMember(Order = 3)]
public string fechaReg { get; set; }
[DataMember(Order = 4)]
public bool manjSer { get; set; }
[DataMember(Order = 5)]
}
任何人都可以帮助我或告诉我代码或格式转换的错误?谢谢你
答案 0 :(得分:2)
您的根JSON实体不是一个列表,它是一个具有名称/值对的对象,第一个名称是0
,值是您的ApiData
类的实例。要对其进行反序列化,您应该使用Dictionary<string, ApiData>
(或Dictionary<int, ApiData>
,如果您确定只有数字显示为键)。
因此:
var serializer = new DataContractJsonSerializer(typeof(Dictionary<string, ApiData>), new DataContractJsonSerializerSettings { UseSimpleDictionaryFormat = true });
var dict = (Dictionary<string, ApiData>)serializer.ReadObject(stream);
请注意,您必须将DataContractJsonSerializerSettings.UseSimpleDictionaryFormat = true
设置为使用DataContractJsonSerializer
来解析此格式的词典 - 此设置仅在.Net 4.5开始时可用。