使用xml Serializer保存对象状态。建议从属性或硬编码字符串中获取节点名称的方法?

时间:2016-08-22 14:08:53

标签: c# xml serialization xml-serialization xmlserializer

我们正在尝试使用XML序列化程序保存对象的状态。对于讨论,假设对象如下:

Class Program
{
    public string Char1 {get; set;}
    public XMLNode Serialize (XmlDocument doc)
    {
        var node = document.CreateElement("Mod")
        node.SetAttribute("Char1", Char1.ToString());
    }
}

这里我们得到属性Char1的值,并尝试将其写在名为Char1的节点中。

拥有节点名称" Char1"是否更好?使用反射从Char1属性派生。但是,这可能会导致在更改属性名称时经常更改XML文档。

如果更改了属性名称且未更新字符串,则xml文档中的值将与该字段的上下文不匹配。

哪种方法更可取?

请建议在编写xml文件时是否有其他更好的方法来避免魔术字符串。

1 个答案:

答案 0 :(得分:0)

我更喜欢以下方式:创建一个类,其中包含您想要序列化的所有数据。然后像这样创建一个XmlSerializer的实例

xmlDocument = new XmlDocument();

using (var stringWriter = new StringWriter(CultureInfo.InvariantCulture))
{
    using (var xmlTextWriter = new XmlTextWriter(stringWriter))
    {
        xmlTextWriter.Formatting = Formatting.Intented;
        var xmlSerializer = new XmlSerializer(myObject.GetType());
        xmlSerializer.Serialize(xmlTextWriter, myObject);
        xmlDocument.PreserveWhitespace = true;
        xmlDocument.LoadXml(stringWriter.ToString());
    }
}