将类序列化为XML?

9

我有以下的类和包含它的列表:

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?

我知道我可以在列表上使用[Serializable]并将其序列化到文件中,但我不确定如何定义它以保存为XML。

2个回答

21
如果你的两个类都被打上了 [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
}

我的主要问题在于它的输出格式,我如何自定义我想要的属性等? - Guapo
@Guapo 在属性/字段上使用[XmlAttribute]属性,将其设置为序列化为属性而不是元素。还有许多其他属性可以用来控制序列化。请参见:http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlattributeattribute.aspx - vcsjones
@vcsjones 谢谢,这很有帮助。我之前在将列表转换为元素时遇到了一些困难,但现在我已经全都搞定了。 - Guapo

0
你需要一个流和一个XmlSerializer对象,这里是一个例子:
FileStream fs = new FileStream(@"C:\MyPath", FileMode.OpenOrCreate);

xmlSerializer = new XmlSerializer(typeof(MyClass));

xmlSerializer.Serialize(fs, myClassInstance);

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

不要忘记以自己的方式处理错误。我还假设您想序列化类的所有属性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接