public void SerializationTest() { var refManager = new ResourceManager("KGySoft.CoreLibraries.Resources.TestResourceResX", GetType().Assembly); var manager = new HybridResourceManager("KGySoft.CoreLibraries.Resources.TestCompiledResource", GetType().Assembly, resXBaseName); var resName = "TestString"; // serializing and de-serializing removes the unchanged resources string testResRef = refManager.GetString(resName); string testRes = manager.GetString(resName); Assert.IsNotNull(testResRef); Assert.IsNotNull(testRes); #if NET35 // TODO .NET 3.5: get/set pointer fields by FieldAccessor Assert.Inconclusive("Serializing pointers is not supported"); #endif refManager = refManager.DeepClone(); manager = manager.DeepClone(); Assert.AreEqual(testResRef, refManager.GetString(resName)); Assert.AreEqual(testRes, manager.GetString(resName)); // introducing a change: serialization preserves the change Assert.IsFalse(manager.IsModified); manager.SetObject(resName, "new string"); Assert.IsTrue(manager.IsModified); CheckTestingFramework(); // the modified resource sets are searched in ResourceManager.ResourceSets Hashtable in .NET 3.5 and in ResXResourceManager.resourceSets Dictionary above. manager = manager.DeepClone(); Assert.IsTrue(manager.IsModified); Assert.AreNotEqual(testRes, manager.GetString(resName)); }