C# 类的JSON序列化返回空值
我正在开发一个通用的Windows10应用程序。我正在使用一个webAPI,我正在尝试使用类的JSON序列化进行post调用, 代码如下: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
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
属性修饰的属性将导致序列化程序忽略它们