Don't apply dictionary key policy on extension data (dotnet/corefx#39425)
authorSteve Harter <steveharter@users.noreply.github.com>
Fri, 12 Jul 2019 18:21:20 +0000 (11:21 -0700)
committerGitHub <noreply@github.com>
Fri, 12 Jul 2019 18:21:20 +0000 (11:21 -0700)
Commit migrated from https://github.com/dotnet/corefx/commit/743149dd45ddf6de418d945ca43cd4beadc81017

src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Write.HandleDictionary.cs
src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializerOptions.Converters.cs
src/libraries/System.Text.Json/tests/Serialization/ExtensionDataTests.cs

index 6d426aa..92d4817 100644 (file)
@@ -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);
 
index 280fd55..6152dc8 100644 (file)
@@ -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");
index 42679c8..905b4fd 100644 (file)
@@ -100,7 +100,7 @@ namespace System.Text.Json.Serialization.Tests
 
                 obj = JsonSerializer.Deserialize<ClassWithExtensionProperty>(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<ClassWithExtensionProperty>(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);
             }
         }