繁体   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