簡體   English   中英

驗證 JSON 屬性的正確方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM