locked
XML сериализация классов со статическими свойствами в C#? RRS feed

  • Общие обсуждения

  • XML сериализация осуществляется посредством использования BinaryFormatter или SoapFormatter. Пошагово реализуем XML сериализацию классов со статическими свойствами:

    1. Пусть класс со статическими свойствами реализует интерфейс ISerializable, установим класс как сериализуемый.
    2. Реализуем функцию GetObjectData.
    3. Создадим новый конструктор с такой же структурой как и у функции GetObjectData.

    Подробнее

    Класс со статическими свойствами:
    [Serializable]
     public class MyClass : ISerializable 
        {
            static int? sindex;
            static int? len;
    
            public static int? StartIndex
            {
                get { return sindex; }
                set { sindex = value; }
            }
            public static int? Length
            {
                get { return len; }
                set { len = value; }
            }
            public MyClass()
            { }
            public void GetObjectData(SerializationInfo info, StreamingContext context)
            {
                info.AddValue("static.sindex", MyClass.sindex, typeof(int));
                info.AddValue("static.len", MyClass.len, typeof(int));
            }
            public MyClass(SerializationInfo info, StreamingContext context)
            {
                MyClass.sindex = info.GetInt32("static.sindex");
                MyClass.len = info.GetInt32("static.len");
            }
        }
    


    Фрагмент кода сериализации и десериализации:
     private void BinarySerialize()
            {
                FileStream fileStream = new FileStream("test.binary", FileMode.Create);
                BinaryFormatter bf = new BinaryFormatter();
                bf.Serialize(fileStream, myClass);
                fileStream.Dispose();
            }
    private void BinaryDeserialize()
            {
                FileStream fileStream = new FileStream("test.binary", FileMode.Open);
                BinaryFormatter bf = new BinaryFormatter();
                MyClass myClass = (MyClass)bf.Deserialize(fileStream);
                MessageBox.Show(MyClass.StartIndex.HasValue.ToString());
                MessageBox.Show(MyClass.StartIndex.Value.ToString());
            }
    private void SoapSerialize()
            {
                FileStream fileStream = new FileStream("test.soap", FileMode.Create);
                SoapFormatter sf = new SoapFormatter();
                sf.Serialize(fileStream, myClass);
                fileStream.Dispose();
            }
    private void SoapDeserialize()
            {
            FileStream fileStream = new FileStream("test.soap", FileMode.Open);
            SoapFormatter sf = new SoapFormatter();
            MyClass myClass = (MyClass)sf.Deserialize(fileStream);
            MessageBox.Show(MyClass.StartIndex.HasValue.ToString());
            MessageBox.Show(MyClass.StartIndex.Value.ToString());
            }


    Похожий тред: XMLSerialization in static properties in C#
    • Перемещено Tagore Bandlamudi 1 октября 2010 г. 23:55 MSDN Forums consolidation (От:Visual C#)
    21 января 2010 г. 21:22