Validator.TryValidateObject()
データ注釈を使用するオブジェクトを検証するために使用しています。オブジェクトが無効な場合、コードは正常に実行されます。ただし、有効な場合は、stackoverflowエラーが発生します。
これが私の方法です:
public virtual IEnumerable<ValidationResult> Validate(ValidationContext vc)
{
vc = new ValidationContext(this, null, null);
List<ValidationResult> a = new List<ValidationResult>();
Validator.TryValidateObject(this, vc, a,true);
foreach (var item in a)
yield return item;
if (Name == "Arbitary")
yield return new ValidationResult("Bad Name.", new[] { "Name" });
}
TryValidateObject
内部的にも私のメソッドを呼び出しているようですValidate
。
このメソッドの目標は、オブジェクトのすべてのDataAnnotationsを検証し、その後、複雑な検証ロジックを追加することです。そのためTryValidateObject
、データアノテーションをチェックすると想定し、その後、独自の検証ロジックを配置できます。
現状では、私のメソッドはデータが無効な場合に機能します。DataAnnotationsから生成されたValidationResultsを報告し、名前が「Arbitary」の場合はValidationResultも追加しますが、データが有効な場合はこのスタックオーバーフローが発生します。
何か案は?自分のValidate
メソッドが呼び出されないように、オブジェクトのデータアノテーションを検証するにはどうすればよいですか?または、このスタックオーバーフローを解決するにはどうすればよいですか?
私のクラスはIValidatableObject
インターフェースを実装していることに注意してください。