private void KGySerializeObjects(object[] referenceObjects, bool compatibilityMode = true, bool checkCompatibleEquality = true, Func <Type, string> typeNameConverter = null, ITypeResolutionService typeResolver = null)
        {
            Console.WriteLine($"------------------KGySoft ResXResourceWriter (Items Count: {referenceObjects.Length}; Compatibility mode: {compatibilityMode})--------------------");
            StringBuilder sb = new StringBuilder();

            using (ResXResourceWriter writer = new ResXResourceWriter(new StringWriter(sb), typeNameConverter)
            {
                CompatibleFormat = compatibilityMode
            })
            {
                int i = 0;
                foreach (object item in referenceObjects)
                {
                    writer.AddResource(i++ + "_" + (item == null ? "null" : item.GetType().Name), item);
                }
            }

            Console.WriteLine(sb.ToString());
            List <object> deserializedObjects = new List <object>();

            using (ResXResourceReader reader = ResXResourceReader.FromFileContents(sb.ToString(), typeResolver))
            {
                foreach (DictionaryEntry item in reader)
                {
                    deserializedObjects.Add(item.Value);
                }
            }

            AssertItemsEqual(referenceObjects, deserializedObjects.ToArray());

#if NETFRAMEWORK
            if (compatibilityMode)
            {
                deserializedObjects.Clear();
                using (SystemResXResourceReader reader = SystemResXResourceReader.FromFileContents(sb.ToString(), typeResolver))
                {
                    try
                    {
                        foreach (DictionaryEntry item in reader)
                        {
                            deserializedObjects.Add(item.Value);
                        }
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine($"System serialization failed: {e}");
                        Console.WriteLine("Skipping equality check");
                        return;
                    }
                }

                if (checkCompatibleEquality)
                {
                    AssertItemsEqual(referenceObjects, deserializedObjects.ToArray());
                }
            }
#endif
        }
Пример #2
0
        private void SystemSerializeObjects(object[] referenceObjects, Func <Type, string> typeNameConverter = null, ITypeResolutionService typeResolver = null)
        {
#if !NETCOREAPP2_0
            using (new TestExecutionContext.IsolatedContext())
            {
                Console.WriteLine($"------------------System ResXResourceWriter (Items Count: {referenceObjects.Length})--------------------");
                try
                {
                    StringBuilder sb = new StringBuilder();
                    using (SystemResXResourceWriter writer =
#if NET35 || NETCOREAPP3_0
                               new SystemResXResourceWriter(new StringWriter(sb))
#else
                               new SystemResXResourceWriter(new StringWriter(sb), typeNameConverter)
#endif

                           )
                    {
                        int i = 0;
                        foreach (object item in referenceObjects)
                        {
                            writer.AddResource(i++ + "_" + (item == null ? "null" : item.GetType().Name), item);
                        }
                    }

                    Console.WriteLine(sb.ToString());
                    List <object> deserializedObjects = new List <object>();
                    using (SystemResXResourceReader reader = SystemResXResourceReader.FromFileContents(sb.ToString(), typeResolver))
                    {
                        foreach (DictionaryEntry item in reader)
                        {
                            deserializedObjects.Add(item.Value);
                        }
                    }

                    AssertItemsEqual(referenceObjects, deserializedObjects.ToArray());
                }
                catch (Exception e)
                {
                    Console.WriteLine($"System serialization failed: {e}");
                }
            }
#endif
        }