using System;
using System.Collections;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Xml;
using System.Xml.Serialization;

public class MainClass
{
    public static void Main()
    {
        // Создание и инициализация экземпляра класса, который будет сериализован
        MyClass myObject = new MyClass();
        myObject.Name = "Объект";
        myObject.Number = 42;
        myObject.StringArray = new string[] { "один", "два", "три" };
        myObject.DataList = new SortedList<int, string>();
        myObject.DataList.Add(1, "Значение 1");
        myObject.DataList.Add(2, "Значение 2");
        myObject.InnerObject = new InnerClass();
        myObject.InnerObject.Value1 = 10;
        myObject.InnerObject.Value2 = 3.14;
        myObject.Image = new Bitmap("image.bmp");

        // Сериализация объекта в XML с использованием XMLWriter
        string xmlWithWriter = SerializeWithXmlWriter(myObject);
        Console.WriteLine("Сериализация с использованием XMLWriter:");
        Console.WriteLine(xmlWithWriter);
        Console.WriteLine();

        // Десериализация XML обратно в объект с использованием XMLReader
        MyClass deserializedObjectWithReader = DeserializeWithXmlReader(xmlWithWriter);
        Console.WriteLine("Десериализация с использованием XMLReader:");
        Console.WriteLine("Имя: " + deserializedObjectWithReader.Name);
        Console.WriteLine("Число: " + deserializedObjectWithReader.Number);
        Console.WriteLine("Строки: " + string.Join(", ", deserializedObjectWithReader.StringArray));
        Console.WriteLine("Список данных:");
        foreach (KeyValuePair<int, string> kvp in deserializedObjectWithReader.DataList)
        {
            Console.WriteLine($"  {kvp.Key}: {kvp.Value}");
        }
        Console.WriteLine("Вложенный объект:");
        Console.WriteLine("  Значение 1: " + deserializedObjectWithReader.InnerObject.Value1);
        Console.WriteLine("  Значение 2: " + deserializedObjectWithReader.InnerObject.Value2);
        Console.WriteLine("Изображение: " + deserializedObjectWithReader.Image);
        Console.WriteLine();

        // Сериализация объекта в XML с использованием XMLSerializer
        string xmlWithSerializer = SerializeWithXmlSerializer(myObject);
        Console.WriteLine("Сериализация с использованием XMLSerializer:");
        Console.WriteLine(xmlWithSerializer);
        Console.WriteLine();

        // Десериализация XML обратно в объект с использованием XMLSerializer
        MyClass deserializedObjectWithSerializer = DeserializeWithXmlSerializer(xmlWithSerializer);
        Console.WriteLine("Десериализация с использованием XMLSerializer:");
        Console.WriteLine("Имя: " + deserializedObjectWithSerializer.Name);
        Console.WriteLine("Число: " + deserializedObjectWithSerializer.Number);
        Console.WriteLine("Строки: " + string.Join(", ", deserializedObjectWithSerializer.StringArray));
        Console.WriteLine("Список данных:");
        foreach (KeyValuePair<int, string> kvp in deserializedObjectWithSerializer.DataList)
        {
            Console.WriteLine($"  {kvp.Key}: {kvp.Value}");
        }
        Console.WriteLine("Вложенный объект:");
        Console.WriteLine("  Значение 1: " + deserializedObjectWithSerializer.InnerObject.Value1);
        Console.WriteLine("  Значение 2: " + deserializedObjectWithSerializer.InnerObject.Value2);
        Console.WriteLine("Изображение: " + deserializedObjectWithSerializer.Image);
    }

    // Класс, который будет сериализован
    [Serializable]
    public class MyClass
    {
        public string Name { get; set; }
        public int Number { get; set; }
        public string[] StringArray { get; set; }
        public SortedList<int, string> DataList { get; set; }
        public InnerClass InnerObject { get; set; }
        [XmlAttribute]
        public Bitmap Image { get; set; }
    }

    // Вложенный класс
    [Serializable]
    public class InnerClass
    {
        public int Value1 { get; set; }
        public double Value2 { get; set; }
    }

    // Сериализация с использованием XMLWriter
    public static string SerializeWithXmlWriter(object obj)
    {
        XmlWriterSettings settings = new XmlWriterSettings
        {
            Indent = true
        };

        using (StringWriter sw = new StringWriter())
        using (XmlWriter writer = XmlWriter.Create(sw, settings))
        {
            writer.WriteStartDocument();
            writer.WriteStartElement("Root");
            XmlSerializer serializer = new XmlSerializer(obj.GetType());
            serializer.Serialize(writer, obj);
            writer.WriteEndElement();
            writer.WriteEndDocument();
            writer.Flush();

            return sw.ToString();
        }
    }

    // Десериализация с использованием XMLReader
    public static MyClass DeserializeWithXmlReader(string xml)
    {
        using (StringReader sr = new StringReader(xml))
        using (XmlReader reader = XmlReader.Create(sr))
        {
            reader.ReadStartElement("Root");
            XmlSerializer serializer = new XmlSerializer(typeof(MyClass));
            MyClass obj = (MyClass)serializer.Deserialize(reader);
            reader.ReadEndElement();

            return obj;
        }
    }

    // Сериализация с использованием XMLSerializer
    public static string SerializeWithXmlSerializer(object obj)
    {
        XmlSerializer serializer = new XmlSerializer(obj.GetType());
        using (StringWriter sw = new StringWriter())
        {
            serializer.Serialize(sw, obj);
            return sw.ToString();
        }
    }

    // Десериализация с использованием XMLSerializer
    public static MyClass DeserializeWithXmlSerializer(string xml)
    {
        XmlSerializer serializer = new XmlSerializer(typeof(MyClass));
        using (StringReader sr = new StringReader(xml))
        {
            MyClass obj = (MyClass)serializer.Deserialize(sr);
            return obj;
        }
    }
}

Данный код выдает ошибку "Невозможно сериализовать член VVP5.MainClass+MyClass.DataList типа System.Collections.Generic.SortedList`2". Как ее решить?