簡體   English   中英

Json數據中的反序列化返回空值

[英]Deserialization in Json data returns null values

我正在Windows 10 Universal應用程序中工作,嘗試從WebAPI接收數據時,我的代碼如下:

        try
        {
            string _serviceUrl = Constants.BaseUrl + "api/RegisterBindingModels?email=" + Useremail;

            HttpClient client = new HttpClient();

            HttpResponseMessage responce = await client.GetAsync(new Uri(_serviceUrl));

            if (responce.Content != null)
            {
                var obj = await responce.Content.ReadAsStringAsync();


                JsonSerializerSettings settings = new JsonSerializerSettings();
                settings.MissingMemberHandling = MissingMemberHandling.Ignore;
                var rcvdData = JsonConvert.DeserializeObject<RegisterModel>(obj, settings);
            }
        }
        catch (Exception)
        {

            throw;
        }

在運行此代碼時,Obj將獲得以下JSON,這與預期的一樣:

 { "UserDetails":{ "UserId":1, "FullName":"sample string 2", "Username":"sample string 3", "ICEFullName":"sample string 4", "ICEMobileNumber":5, "DoctorFullName":"sample string 6", "DoctorMobileNumber":7 }, "UserId":1, "Email":"akshay@gmail.com", "Password":"add‌​sFABBS!2", "ConfirmPassword":"addsFABBS!2" } 

不過,var rcvdData具有所有空值:

像這樣

RegisterModel如下:

namespace APIValueSetterTest.Model
{
    using System.Runtime.Serialization;

    [DataContract]
    public class RegisterModel
    {
        public int UserId { get; set; }

        public string Email { get; set; }

        public string Password { get; set; }

        public string ConfirmPassword { get; set; }

        public UserDetails UserDetails { get; set; }
    }
}

而UserDetails模型如下:

namespace APIValueSetterTest.Model
{
    using System.Runtime.Serialization;

    [DataContract]
    public class UserDetails
    {
        public int UserId { get; set; }

        public string FullName { get; set; }

        public string Username { get; set; }

        public string ICEFullName { get; set; }

        public int ICEMobileNumber { get; set; }

        public string DoctorFullName { get; set; }

        public int DoctorMobileNumber { get; set; }
    }
}

我需要幫助,我哪里出問題了?

問題是您已經用[DataContract]標記了類型,但是還沒有使用[DataMember]標記要序列化的每個成員。 顯式數據合同序列化是可選的,如使用數據合同中所述

您還可以使用DataContractAttributeDataMemberAttribute屬性顯式創建數據協定。 通常通過將DataContractAttribute屬性應用於該類型來完成此操作。 此屬性可以應用於類,結構和枚舉。 然后,必須將DataMemberAttribute屬性應用於數據協定類型的每個成員,以表明它是數據成員 ,即應進行序列化 有關更多信息,請參見可序列化類型

由於支持數據協定(如其文檔所述) ,因此您需要刪除[DataContract]或向所有可序列化成員添加[DataMember]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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