簡體   English   中英

無法反序列化Json格式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM