[英]Call the constructor when Deserializing json to object
我有LoginModels
:
public class LoginModels
{
public LoginModels(string userEmail, string userPassword)
{
email = userEmail;
password = userPassword;
errorMessage = GetLoginError();
}
public string email;
public string password;
public string errorMessage;
public string GetLoginError()
{
if (string.IsNullOrEmpty(email)) return "email is empty";
else return "good";
}
}
我向控制器的函數發送了一個 json ..
在控制器中,我寫道:
LoginModels user = JsonConvert.DeserializeObject<LoginModels>(userDetails);
string relevantEmail = user.email;
但是LoginModels
的構造函數將email
和password
設為 null。
這就是errorMessage
is email is empty
的原因。
但relevantEmail
電子郵件是來自 ajax 的電子郵件(沒關系)。
我真的不知道為什么構造函數沒有得到 ajax 調用發送的參數。
任何幫助表示贊賞!
序列化/反序列化只能調用默認構造函數 - 假設您將有多個帶有各種參數的構造函數 - 框架如何猜測要調用哪個/哪些參數? 此外,可序列化的字段應該是屬性。 所以你的對象應該是這樣的:
public class LoginModels
{
private string _errorMessage;
// default ctor for serialization
public LoginModels()
{
}
public LoginModels(string userEmail, string userPassword)
{
email = userEmail;
password = userPassword;
}
public string email { get; set; }
public string password { get; set; }
public string errorMessage
{
get
{
if (string.IsNullOrEmpty(_errorMessage))
{
_errorMessage = GetLoginError();
}
return _errorMessage;
}
set { _errorMessage = value; }
}
public string GetLoginError()
{
if (string.IsNullOrEmpty(email))
{
return "email is empty";
}
// also no need for "else" here
return "good";
}
}
使用 JsonConstructor 屬性,以便您的 JsonConvert 知道要使用哪個構造函數:
using using Newtonsoft.Json;;
public class LoginModels
{
[JsonConstructor]
public LoginModels(string userEmail, string userPassword)
{
email = userEmail;
password = userPassword;
errorMessage = GetLoginError();
}
public string email;
public string password;
public string errorMessage;
public string GetLoginError()
{
if (string.IsNullOrEmpty(email)) return "email is empty";
else return "good";
}
}
這是來源: https : //www.newtonsoft.com/json/help/html/JsonConstructorAttribute.htm
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.