[英]The correct way to validate JSON property
將 JSON 反序列化為模型時使用高級屬性驗證的正確方法是什么? 我以MyClass
為例。 我需要驗證姓名( required
)和電子郵件( e-mail address validation
)。 我確實發現只有[JsonProperty(Required = Required.Always)]
來驗證所需的屬性,而沒有找到用於電子郵件驗證的內容。 不幸的是,不能從 MVC 使用數據注釋驗證器進行驗證。
我想到的一個想法是創建自定義ContractResolver
並附加到我可以執行自定義驗證的解串器。 還有其他方法可以考慮嗎?
public class MyClass
{
[JsonProperty(Required = Required.Always)]
public string Name { get; set; }
public string Email { get; set; }
}
_dto = JsonConvert.DeserializeObject<MyClass>(content);
public class MyClass
{
[JsonProperty("name", Required = Required.Always)]
public string Name { get; set; }
[JsonProperty("email", Required = Required.Always)]
public string Email { get; set; }
}
要驗證電子郵件,您必須在反序列化后應用自己的正則表達式檢查。
所以我有一些時間來測試這個,正如我懷疑的那樣, MailAddress
被反序列化為一個比簡單地址更復雜的 json 對象 - 這意味着如果你想保持你的 json 原樣,你不能改變屬性類型為MailAddress
。
但是,這並不意味着您不能利用它在構造函數中的內置格式驗證,只是不能利用自動實現的屬性。
如果你把你的班級改成這樣——
public class MyClass
{
private string email;
[JsonProperty(Required = Required.Always)]
public string Name { get; set; }
[JsonProperty(Required = Required.Always)]
public string Email {
get
{
return email;
}
set
{
var address = new MailAddress(value);
email = value;
}
}
}
每當您嘗試反序列化包含無效格式電子郵件地址的 json 時(實際上,每當您嘗試將此屬性設置為無效電子郵件地址的字符串時),您都會收到FormatException
:
System.FormatException: 指定的字符串不是電子郵件地址所需的格式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.