diff --git a/CHANGELOG.md b/CHANGELOG.md index 240c251..9f1288b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -41,8 +41,6 @@ To have a consistent experience across all packages, some public interfaces have ### Added -- **request.validation:** Support `PropertyPath` JSON converter for string values and dictionary property names - ### Changed ### Removed diff --git a/Directory.Build.props b/Directory.Build.props index 86d2794..aec0af3 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -9,8 +9,7 @@ - 2.1.0 - preview + 2.0.0 diff --git a/src/request.validation.tests/PropertyPathTests.cs b/src/request.validation.tests/PropertyPathTests.cs index 2551450..bce4614 100644 --- a/src/request.validation.tests/PropertyPathTests.cs +++ b/src/request.validation.tests/PropertyPathTests.cs @@ -12,19 +12,6 @@ internal sealed class PropertyPathTests PropertyNamingPolicy = JsonNamingPolicy.CamelCase, }; - private static readonly JsonSerializerOptions CamelCaseDictionaryKeyJsonOptions = new() - { - DictionaryKeyPolicy = JsonNamingPolicy.CamelCase, - }; - - [Test] - public async Task I_can_serialize_property_paths_as_json_strings_using_the_json_naming_policy() - { - var json = JsonSerializer.Serialize((PropertyPath)"Address.Street", CamelCaseJsonOptions); - - await Assert.That(json).IsEqualTo(/*lang=json,strict*/ "\"address.street\""); - } - [Test] public async Task I_can_serialize_property_paths_using_the_json_naming_policy() { @@ -67,32 +54,6 @@ internal sealed class PropertyPathTests await Assert.That(json).IsEqualTo(/*lang=json,strict*/ """{"propertyPath":"matrix[1][2].value","severity":0,"message":"Value is required.","code":null,"attemptedValue":null}"""); } - [Test] - public async Task I_can_serialize_property_paths_as_dictionary_keys_using_the_dictionary_key_policy() - { - Dictionary errors = new() - { - ["Address.Street"] = "Street is required.", - }; - - var json = JsonSerializer.Serialize(errors, CamelCaseDictionaryKeyJsonOptions); - - await Assert.That(json).IsEqualTo(/*lang=json,strict*/ """{"address.street":"Street is required."}"""); - } - - [Test] - public async Task I_can_deserialize_property_paths_from_dictionary_keys() - { - var json = /*lang=json,strict*/ """{"Address.Street":"Street is required."}"""; - - var errors = JsonSerializer.Deserialize>(json); - - await Assert.That(errors).IsNotNull(); - await Assert.That(errors!.Count).IsEqualTo(1); - await Assert.That(errors.ContainsKey("Address.Street")).IsTrue(); - await Assert.That(errors["Address.Street"]).IsEqualTo("Street is required."); - } - [Test] public async Task I_can_iterate_and_index_segments() { diff --git a/src/request.validation/PropertyPath.cs b/src/request.validation/PropertyPath.cs index 4b9bd50..4bf0e62 100644 --- a/src/request.validation/PropertyPath.cs +++ b/src/request.validation/PropertyPath.cs @@ -399,26 +399,9 @@ internal sealed class PropertyPathJsonConverter : JsonConverter throw new JsonException($"Expected {nameof(JsonTokenType.String)} but got {reader.TokenType}."); } - /// - public override PropertyPath ReadAsPropertyName(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) - { - if (reader.TokenType is JsonTokenType.PropertyName) - { - return new PropertyPath(reader.GetString()!); - } - - throw new JsonException($"Expected {nameof(JsonTokenType.PropertyName)} but got {reader.TokenType}."); - } - /// public override void Write(Utf8JsonWriter writer, PropertyPath value, JsonSerializerOptions options) { writer.WriteStringValue(value.ToJsonName(options.PropertyNamingPolicy)); } - - /// - public override void WriteAsPropertyName(Utf8JsonWriter writer, PropertyPath value, JsonSerializerOptions options) - { - writer.WritePropertyName(value.ToJsonName(options.DictionaryKeyPolicy)); - } }