Создание пользовательской проверки через DataAnnotations?

Итак, когда я хочу проверить свойство, я могу написать что-то вроде этого:

    [Required]
    [StringLength(255)]
    [DataType(DataType.EmailAddress)]
    [RegularExpression(RegexStrings.Email, ErrorMessage = "Email is not valid.")]
    [DataMember(IsRequired = true, Name="Email", Order = 1)]
    public string Email { get; set; }

Мне это нравится, потому что в этом случае я указываю на строки регулярных выражений, которые есть в нашей общей библиотеке, и указываю сообщение об ошибке в случае сбоя. Просто и чисто.

Моя ситуация такая. Это в службе WCF RESTful. Одно из свойств, которые я хочу проверитьтаким образом Необходимо проверить с помощью пользовательского метода, который проверяет с использованием некоторой бизнес-логики (он проверяет длину строки и длину байта). Могу ли я (и как мне) настроить эту пользовательскую проверку, чтобы я мог использовать ее так же, как в приведенном выше примере; так это выглядит примерно так:

[StreamValidation(ValidationClass, ErrorMessage = "Serial number is invalid")]
public string Ksn { get; set; }

ОБНОВИТЬ:

Я создал следующий класс, чтобы быть моим атрибутом:

[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false)]
public class KsnValidation : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        if (!(value is string)) return false;

        var val = (string) value;
        var bytes = Enumerable
            .Range(0, val.Length / 2)
            .Select(x => Byte.Parse(val.Substring(2 * x, 2), NumberStyles.HexNumber))
            .ToArray();
        return val.Length == 20 && bytes.Length == 10;
    }

    public override string FormatErrorMessage(string name)
    {
        return base.FormatErrorMessage(name);
    }
}

Затем оформляется следующее свойство:

[KsnValidation(ErrorMessage = "Wrong Name")]
public string Ksn { get; set; }

Но я'я не уверен, как это проверить

Ответы на вопрос(2)

Ваш ответ на вопрос