diff --git a/Directory.Packages.props b/Directory.Packages.props index 76b6d47..9754d60 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -13,5 +13,6 @@ + \ No newline at end of file diff --git a/src/Directory.Build.props b/src/Directory.Build.props index d2d2e35..5cac6aa 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -1,7 +1,7 @@ - 0.9.0 + 0.9.1 dev diff --git a/src/MiniValidation/MiniValidator.cs b/src/MiniValidation/MiniValidator.cs index 268e4bb..99d3d11 100644 --- a/src/MiniValidation/MiniValidator.cs +++ b/src/MiniValidation/MiniValidator.cs @@ -380,7 +380,12 @@ private static async Task TryValidateImpl( foreach (var property in typeProperties) { - var propertyValue = property.GetValue(target); + object? propertyValue = null; + try + { + propertyValue = property.GetValue(target); + } + catch (Exception) { } var propertyValueType = propertyValue?.GetType(); var (properties, _) = _typeDetailsCache.Get(propertyValueType); diff --git a/tests/MiniValidation.UnitTests/MiniValidation.UnitTests.csproj b/tests/MiniValidation.UnitTests/MiniValidation.UnitTests.csproj index fc7cbec..17cea61 100644 --- a/tests/MiniValidation.UnitTests/MiniValidation.UnitTests.csproj +++ b/tests/MiniValidation.UnitTests/MiniValidation.UnitTests.csproj @@ -3,7 +3,7 @@ net6.0;net7.0 net471;net6.0;net7.0 - 10.0 + 11.0 enable enable @@ -27,6 +27,7 @@ all + diff --git a/tests/MiniValidation.UnitTests/TestTypes.cs b/tests/MiniValidation.UnitTests/TestTypes.cs index 865ca97..222f5ef 100644 --- a/tests/MiniValidation.UnitTests/TestTypes.cs +++ b/tests/MiniValidation.UnitTests/TestTypes.cs @@ -245,4 +245,22 @@ class TestTypeForTypeDescriptor [MaxLength(1)] public string? AnotherProperty { get; set; } = "Test"; -} \ No newline at end of file +} + +class ClassWithJTokenProperty +{ + public ClassWithJTokenProperty() + { + SomeJsonToken = Newtonsoft.Json.Linq.JToken.Parse(""" + { + "prop1": 123, + "array1": [1, 2, 3], + "obj1": { + "prop2": "abc" + } + } + """); + } + + public Newtonsoft.Json.Linq.JToken SomeJsonToken { get; } +} diff --git a/tests/MiniValidation.UnitTests/TryValidate.cs b/tests/MiniValidation.UnitTests/TryValidate.cs index f4e7ddb..009b606 100644 --- a/tests/MiniValidation.UnitTests/TryValidate.cs +++ b/tests/MiniValidation.UnitTests/TryValidate.cs @@ -413,4 +413,15 @@ public async Task TryValidateAsync_With_Attribute_Attached_Via_TypeDescriptor() Assert.Single(errors["PropertyToBeRequired"]); Assert.Single(errors["AnotherProperty"]); } + + [Fact] + public void CanValidateClassWithJTokenProperty() + { + var thingToValidate = new ClassWithJTokenProperty(); + + var result = MiniValidator.TryValidate(thingToValidate, out var errors); + + Assert.True(result); + Assert.Equal(0, errors.Count); + } }