Allow deserialization for ResourceManager created with non-default resource set type...
authorFilip Navara <filip.navara@gmail.com>
Fri, 8 Mar 2019 18:55:25 +0000 (19:55 +0100)
committerDan Moseley <danmose@microsoft.com>
Fri, 8 Mar 2019 18:55:25 +0000 (10:55 -0800)
Commit migrated from https://github.com/dotnet/coreclr/commit/d74fa42f811dbe28a8c12ae39122f8d110fbfa5c

src/libraries/System.Private.CoreLib/src/System/Resources/ManifestBasedResourceGroveler.cs

index f2ef9dd..485417d 100644 (file)
@@ -237,10 +237,23 @@ namespace System.Resources
                     }
                     else
                     {
-                        Type readerType = Type.GetType(readerTypeName, throwOnError: true);
-                        object[] args = new object[1];
-                        args[0] = store;
-                        IResourceReader reader = (IResourceReader)Activator.CreateInstance(readerType, args);
+                        IResourceReader reader;
+
+                        // Permit deserialization as long as the default ResourceReader is used
+                        if (ResourceManager.IsDefaultType(readerTypeName, ResourceManager.ResReaderTypeName))
+                        {
+                            reader = new ResourceReader(
+                                store,
+                                new Dictionary<string, ResourceLocator>(FastResourceComparer.Default),
+                                permitDeserialization: true);
+                        }
+                        else
+                        {
+                            Type readerType = Type.GetType(readerTypeName, throwOnError: true);
+                            object[] args = new object[1];
+                            args[0] = store;
+                            reader = (IResourceReader)Activator.CreateInstance(readerType, args);
+                        }
 
                         object[] resourceSetArgs = new object[1];
                         resourceSetArgs[0] = reader;