C# 类的JSON序列化返回空值

C# 类的JSON序列化返回空值,c#,json,C#,Json,我正在开发一个通用的Windows10应用程序。我正在使用一个webAPI,我正在尝试使用类的JSON序列化进行post调用, 代码如下: public async void PostAPI() { try { var postObject = JsonConvert.SerializeObject(thisUser); string _serviceUrl = Constants.BaseUrl + "a

我正在开发一个通用的Windows10应用程序。我正在使用一个webAPI,我正在尝试使用类的JSON序列化进行post调用, 代码如下:

public async void PostAPI()
    {
        try
        {
            var postObject = JsonConvert.SerializeObject(thisUser);

            string _serviceUrl = Constants.BaseUrl + "api/Account/Register";
            HttpClient client = new HttpClient();

            await client.PostAsync(new Uri(_serviceUrl), new HttpStringContent(postObject, Windows.Storage.Streams.UnicodeEncoding.Utf8, "application/json"));
        }
        catch (Exception)
        {
            throw;
        }

    }
using System.Runtime.Serialization;

namespace APIValueSetterTest.Model
{
    [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; }
    }
}
此用户的值取自UI中的文本框,如下所示:

        RegisterModel thisUser = new RegisterModel();
thisUser.UserDetails = new UserDetails();
        thisUser.Email = UserInputemail.Text;
        thisUser.Password = "addsFABBS!2";
        thisUser.ConfirmPassword = "addsFABBS!2";
        thisUser.UserDetails.FullName = UserInputName.Text;
        thisUser.UserDetails.Username = UserInputUserName.Text;
        thisUser.UserDetails.FullName = UserInputName.Text;
        thisUser.UserDetails.ICEFullName = ICEName.Text;
        thisUser.UserDetails.ICEMobileNumber = int.Parse(ICEPhoneNo.Text);
        thisUser.UserDetails.DoctorFullName = DocName.Text;
        thisUser.UserDetails.DoctorMobileNumber = int.Parse(DocPhoneNo.Text);
postObject保持为空。它的值为{},其中的值与thisUser中的值相同

thisUser是RegisterModel类的实例,该类具有以下属性:

  using System.Runtime.Serialization;
  namespace APIValueSetterTest.Model
  {
    [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; }
    }

}
用户详细信息类如下所示:

public async void PostAPI()
    {
        try
        {
            var postObject = JsonConvert.SerializeObject(thisUser);

            string _serviceUrl = Constants.BaseUrl + "api/Account/Register";
            HttpClient client = new HttpClient();

            await client.PostAsync(new Uri(_serviceUrl), new HttpStringContent(postObject, Windows.Storage.Streams.UnicodeEncoding.Utf8, "application/json"));
        }
        catch (Exception)
        {
            throw;
        }

    }
using System.Runtime.Serialization;

namespace APIValueSetterTest.Model
{
    [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; }
    }
}

我哪里出错了?

我想您需要指出这个类上的属性是数据成员,如下所示:

using System.Runtime.Serialization;

namespace APIValueSetterTest.Model
  {
    [DataContract]
    public class RegisterModel
    {
        [DataMember]      
        public int UserId { get; set; }
        [DataMember]      
        public string Email { get; set; }
        [DataMember]
        public string Password { get; set; }
        [DataMember]
        public string ConfirmPassword { get; set; }
        [DataMember]
        public UserDetails UserDetails { get; set; }
    }

}
UserDetails类也是如此:

using System.Runtime.Serialization;

namespace APIValueSetterTest.Model
{
    [DataContract]
    public class UserDetails
    {
        [DataMember]
        public int UserId { get; set; }
        [DataMember]
        public string FullName { get; set; }
        [DataMember]
        public string Username { get; set; }
        [DataMember]
        public string ICEFullName { get; set; }
        [DataMember]
        public int ICEMobileNumber { get; set; }
        [DataMember]
        public string DoctorFullName { get; set; }
        [DataMember]
        public int DoctorMobileNumber { get; set; }
    }
}

未使用
DataMember
属性修饰的属性将导致序列化程序忽略它们。

我认为您需要将此类上的属性指示为数据成员,如下所示:

using System.Runtime.Serialization;

namespace APIValueSetterTest.Model
  {
    [DataContract]
    public class RegisterModel
    {
        [DataMember]      
        public int UserId { get; set; }
        [DataMember]      
        public string Email { get; set; }
        [DataMember]
        public string Password { get; set; }
        [DataMember]
        public string ConfirmPassword { get; set; }
        [DataMember]
        public UserDetails UserDetails { get; set; }
    }

}
UserDetails类也是如此:

using System.Runtime.Serialization;

namespace APIValueSetterTest.Model
{
    [DataContract]
    public class UserDetails
    {
        [DataMember]
        public int UserId { get; set; }
        [DataMember]
        public string FullName { get; set; }
        [DataMember]
        public string Username { get; set; }
        [DataMember]
        public string ICEFullName { get; set; }
        [DataMember]
        public int ICEMobileNumber { get; set; }
        [DataMember]
        public string DoctorFullName { get; set; }
        [DataMember]
        public int DoctorMobileNumber { get; set; }
    }
}
未使用
DataMember
属性修饰的属性将导致序列化程序忽略它们