Отображение класса и XML-файла с использованием сериализации - PullRequest
1 голос
/ 21 сентября 2009

Если я создаю класс в C #, как я могу сериализовать / десериализовать его в файл? Это что-то, что можно сделать с помощью встроенных функций или это пользовательский код?

Ответы [ 2 ]

3 голосов
/ 21 сентября 2009

XmlSerializer; обратите внимание, что точные имена XML можно контролировать с помощью различных атрибутов , но все, что вам действительно нужно:

  • публичный тип
  • с конструктором по умолчанию
  • и открытые члены для чтения / записи (в идеале свойства)

Пример:

using System;
using System.Xml;
using System.Xml.Serialization;
public class Person {
    public string Name { get; set; }
}

static class Program {
    static void Main() {
        Person person = new Person { Name = "Fred"};
        XmlSerializer ser = new XmlSerializer(typeof(Person));
        // write
        using (XmlWriter xw = XmlWriter.Create("file.xml")) {
            ser.Serialize(xw, person);
        }
        // read
        using (XmlReader xr = XmlReader.Create("file.xml")) {
            Person clone = (Person) ser.Deserialize(xr);
            Console.WriteLine(clone.Name);
        }
    }
}
0 голосов
/ 21 сентября 2009

Вам нужно использовать класс XmlSerializer. Основными методами являются Сериализация и Десериализация. Они принимают потоки, читатели текста \ писатели и другие классы.

Пример кода:

public class Program
{
    public class MyClass
    {
        public string Name { get; set; }
    }

    static void Main(string[] args)
    {
        var myObj = new MyClass { Name = "My name" };
        var fileName = "data.xml";

        var serializer = new XmlSerializer(typeof(MyClass));

        using (var output = new XmlTextWriter(fileName, Encoding.UTF8))
            serializer.Serialize(output, myObj);

        using (var input = new StreamReader(fileName))
        {
            var deserialized = (MyClass)serializer.Deserialize(input);
            Console.WriteLine(deserialized.Name);
        }

        Console.WriteLine("Press ENTER to finish");
        Console.ReadLine();
    }
}
...