使用 xml 序列化程序保存对象状态。从 属性 或硬编码字符串中获取节点名称的推荐方法?

Saving object state using xml Serializer. Recommend approach for getting node name from property or hardcoded string?

我们正在尝试使用 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 文件时是否有任何其他更好的方法来避免魔术字符串。

我更喜欢以下方式:创建一个 class 来保存您想要序列化的所有数据。然后像这样创建一个 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());
    }
}