我有一个序列化为XML文件的对象。一切都按预期工作,但我想向根元素添加Version属性。
最好的方法是什么?
以下是我如何序列化的示例:
MyProgram newProgram = new MyProgram()
{
ValueA = "A value.",
ValueB = "B value.",
ValueC = "C value."
};
XmlSerializer xmlSerializer = new XmlSerializer(typeof(MyProgram));
StreamWriter streamWriter = new StreamWriter(fileName);
xmlSerializer.Serialize(streamWriter, newProgram);
streamWriter.Close();
现在,我的XML看起来像这样:
<MyProgram>
<ValueA>A value.</ValueA>
<ValueB>B value.</ValueB>
<ValueC>C value.</ValueC>
</MyProgram>
但是我想要这个:
<MyProgram Version="1.0">
<ValueA>A value.</ValueA>
<ValueB>B value.</ValueB>
<ValueC>C value.</ValueC>
</MyProgram>
谢谢!
答案 0 :(得分:0)
第一
假设您有一个具体的类而不是一个匿名类,则将XML修改为这样
[XmlRoot("MyProgram")]//sepcifies the name of the root element
public class MyProgram
{
[XmlAttribute("Version")]//name not required unless you want to change output to something different
public string Version{get;set;}
[XmlElement("ValueA")]//again, name not required if the name is the same
public ValueA ValueA{get;set;}
....
}
然后按照您指定的方式创建MyProgram类将为您提供所需的输出,还请注意,如果最终结果不是所需的,则可能需要向ValueA / B / C类添加XML标记。
第二个 将XML数据序列化为字符串,然后使用简单的Regex / String操作插入所需的值,然后将字符串保存到所需的位置
第三
您可以使用XElement查询您的XML字符串/创建它,然后设置Version属性
XElement x = XElement.Load("Your XML location");
var yourRoot = x.Descendants("MyProgram").FirstOrDefaul();
yourRoot.SetAttributeValue("Version","1.0");
yourRoot.Save("Your XML location");