From 03c9f4c31b9373cc9a5132b5653c3977422803b7 Mon Sep 17 00:00:00 2001 From: Steve Harter Date: Fri, 12 Jul 2019 11:21:20 -0700 Subject: [PATCH] Don't apply dictionary key policy on extension data (dotnet/corefx#39425) Commit migrated from https://github.com/dotnet/corefx/commit/743149dd45ddf6de418d945ca43cd4beadc81017 --- .../Text/Json/Serialization/JsonSerializer.Write.HandleDictionary.cs | 3 ++- .../Text/Json/Serialization/JsonSerializerOptions.Converters.cs | 4 ++-- .../System.Text.Json/tests/Serialization/ExtensionDataTests.cs | 4 ++-- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Write.HandleDictionary.cs b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Write.HandleDictionary.cs index 6d426aa..92d4817 100644 --- a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Write.HandleDictionary.cs +++ b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Write.HandleDictionary.cs @@ -143,7 +143,8 @@ namespace System.Text.Json } else { - if (options.DictionaryKeyPolicy != null) + if (options.DictionaryKeyPolicy != null && + current.ExtensionDataStatus != ExtensionDataWriteStatus.Writing) // We do not convert extension data. { key = options.DictionaryKeyPolicy.ConvertName(key); diff --git a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializerOptions.Converters.cs b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializerOptions.Converters.cs index 280fd55..6152dc8 100644 --- a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializerOptions.Converters.cs +++ b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializerOptions.Converters.cs @@ -152,9 +152,9 @@ namespace System.Text.Json } // Allow redirection for generic types or the enum converter. - if (converter is JsonConverterFactory binder) + if (converter is JsonConverterFactory factory) { - converter = binder.GetConverterInternal(typeToConvert); + converter = factory.GetConverterInternal(typeToConvert); if (converter == null || converter.TypeToConvert == null) { throw new ArgumentNullException("typeToConvert"); diff --git a/src/libraries/System.Text.Json/tests/Serialization/ExtensionDataTests.cs b/src/libraries/System.Text.Json/tests/Serialization/ExtensionDataTests.cs index 42679c8..905b4fd 100644 --- a/src/libraries/System.Text.Json/tests/Serialization/ExtensionDataTests.cs +++ b/src/libraries/System.Text.Json/tests/Serialization/ExtensionDataTests.cs @@ -100,7 +100,7 @@ namespace System.Text.Json.Serialization.Tests obj = JsonSerializer.Deserialize(jsonWithProperty, options); Assert.Equal(1, obj.MyOverflow["MyIntMissing"].GetInt32()); - string json = JsonSerializer.Serialize(obj); + string json = JsonSerializer.Serialize(obj, options); Assert.Contains(@"""MyIntMissing"":1", json); } @@ -120,7 +120,7 @@ namespace System.Text.Json.Serialization.Tests obj = JsonSerializer.Deserialize(jsonWithPropertyCamelCased, options); Assert.Equal(1, obj.MyOverflow["myIntMissing"].GetInt32()); - string json = JsonSerializer.Serialize(obj); + string json = JsonSerializer.Serialize(obj, options); Assert.Contains(@"""myIntMissing"":1", json); } } -- 2.7.4