如何将标准验证数据注释与自定义类型一起使用?

是否可以在.NET框架中使用标准数据注释(如StringLength,RegularExpression,Required等)和自定义类型?

我想要做的是这样的事情:

  class MyProperty<TValue>
   {
      public bool Reset { get; set; }
      public TValue Value { get; set; }
   }

   class MyClass
   {
      [Required]
      [StringLength(32)]
      MyProperty<string> Name { get; set; }

      [StringLength(128)]
      MyProperty<string> Address { get; set; }

   }

而且,当然,我希望验证按照“Value”属性进行操作。 看看各种验证属性的代码,看起来他们只是简单地调用ToString()来从对象中获取一个值。 我尝试重写ToString()并将Value作为字符串返回,但是正在抛出异常,指出注释不能将对象(Value)强制转换为字符串(即使覆盖已经做到了......)。

我试图避免编写所有各种可能的验证器的自定义版本来适应这种简单的类型。


您可以查看StringLength的源代码:https://github.com/Microsoft/referencesource/blob/master/System.ComponentModel.DataAnnotations/DataAnnotations/StringLengthAttribute.cs

您可以看到IsValid将您的值转换为字符串,这会导致您的自定义类失败。 但是你可以创建你自己的验证属性。

这里是一个明确的字符串铸造选项,不写你自己的验证器:

public static explicit operator string(MyProperty prop)
{
       return "Stuff you want to return as string";
}

把它放在你的MyProperty类中。

链接地址: http://www.djcxy.com/p/9703.html

上一篇: How to use standard validation data annotations with custom types?

下一篇: Custom data annotations with webservice in ASP.NET 3.5