[英]Cannot Deserilize Json Format
我無法對此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)]
}
任何人都可以幫助我或告訴我代碼或格式轉換有什么問題嗎? 謝謝
您的根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開始可用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.