序列化对象时向根XML元素添加属性

时间:2018-11-26 14:52:00

标签: c# xml

我有一个序列化为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>

谢谢!

1 个答案:

答案 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");