This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
This is a .NET Standard library for recursive DataAnnotations validation, extending the built-in validation capabilities to handle nested objects and collections within objects.
The core functionality is provided by RecursiveDataAnnotationValidator which:
- Validates an object graph recursively, traversing nested properties
- Prevents infinite loops in cyclical object references
- Supports
IEnumerablecollections for recursive validation - Allows skipping specific properties with
[SkipRecursiveValidation]attribute
The codebase has a clear separation between the main library and tests:
-
src/RecursiveDataAnnotationsValidation/ - The core library project with:
- Main validator implementation (
RecursiveDataAnnotationValidator.cs) - Skip attribute for excluding properties from validation (
SkipRecursiveValidation.cs) - Extension methods and interfaces
- Main validator implementation (
-
test/RecursiveDataAnnotationsValidation.Tests/ - Test project with:
- Tests for various recursive validation scenarios
- Example test models (RecursionExample, EnumerableExample, etc.)
-
examples/ - Example project showing usage patterns
dotnet builddotnet testdotnet test test/RecursiveDataAnnotationsValidation.Tests/RecursiveDataAnnotationsValidation.Tests.csproj --filter "RecursionExampleTests.Passes_all_validation"dotnet test test/RecursiveDataAnnotationsValidation.Tests/RecursiveDataAnnotationsValidation.Tests.csproj --collect:"XPlat Code Coverage"RecursiveDataAnnotationValidator.cs- Main implementation that handles recursive object validationSkipRecursiveValidationAttribute.cs- Attribute for excluding properties from recursive validation- Test models in
test/RecursiveDataAnnotationsValidation.Tests/TestModels/show various usage patterns
- Main library targets
.NET Standard 2.0 - Test project targets
net8.0
The recursive validator handles:
- Cyclical object references to prevent infinite loops
- Collections (IEnumerable) with recursive validation of items
- Null value handling for nested objects and collections
- Proper error message formatting that includes property paths
The validator uses reflection to examine object properties and recursively validate nested objects.