Сериализовать класс в XML? - PullRequest
8 голосов
/ 09 мая 2011

У меня есть следующий класс и список, в котором он содержится:

public class Transport
{
    public string TransportType { get; set; }
    public string Mode { get; set; }
    public class Coordinates
    {
        public float ID { get; set; }
        public float LocX { get; set; }
        public float LocY { get; set; }
        public float LocZ { get; set; }
        public ObjectState State { get; set; }
        public List<int[]> Connections = new <int[]>();
    }
}

public enum ObjectState
{
    Fly,
    Ground,
    Water
}

public static List<Transport> Tracking = new List<Transport>();

Как мне сериализовать отслеживание в XML?

Я знаю, что могу использовать [Сериализуемый] в списке и сериализовать его в файл, но я не уверен, как определить его для сохранения в формате XML.

Ответы [ 2 ]

19 голосов
/ 09 мая 2011

Если оба ваших класса были помечены атрибутом [Serializable], сохранение объектов в файл должно быть простым:

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

using(var writer = new StreamWriter("C:\\Path\\To\\File.xml"))
{
    serializer.Serialize(writer, instance);
}

Обновление

Извините, не понял, что вы спрашивали о том, как настроить вывод.Вот для чего нужны атрибуты [XmlAttribute] и [XmlElement]:

public class Transport
{
    // Store TransportType as an attrribute called Type in the XML
    [XmlAttribute("Type")]
    public string TransportType { get; set; }

    // Rest of Implementation
}
0 голосов
/ 09 мая 2011

Вам нужен поток и объект XmlSerializer, вот пример:

FileStream fs = new FileStream(@"C:\MyPath", FileMode.OpenOrCreate);

xmlSerializer = new XmlSerializer(typeof(MyClass));

xmlSerializer.Serialize(fs, myClassInstance);

fs.Flush();
fs.Close();
fs.Dispose();

Не забывайте обрабатывать ошибки по-своему. И я также предполагаю, что вы хотите сериализовать все свойства вашего класса.

...