【问题标题】:Serialize class to XML?将类序列化为 XML?
【发布时间】:2013-06-04 18:09:08
【问题描述】:

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

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>();

如何将 Tracking 序列化为 XML?

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

【问题讨论】:

    标签: c# xml-serialization


    【解决方案1】:

    如果您的两个类都被标记为[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 使用属性/字段上的[XmlAttribute] 属性将事物设置为与元素相反的属性序列化。您可以使用许多其他属性来装饰来控制序列化。见:msdn.microsoft.com/en-us/library/…
    • @vcsjones 谢谢,这有帮助,我在将列表转换为元素时遇到了一些重大困难,但现在我已经全部解决了。
    【解决方案2】:

    您需要一个流和一个 XmlSerializer 对象,这是一个示例:

    FileStream fs = new FileStream(@"C:\MyPath", FileMode.OpenOrCreate);
    
    xmlSerializer = new XmlSerializer(typeof(MyClass));
    
    xmlSerializer.Serialize(fs, myClassInstance);
    
    fs.Flush();
    fs.Close();
    fs.Dispose();
    

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

    【讨论】:

      猜你喜欢
      • 2010-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多