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