繁体   English   中英

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

[英]Adding an attribute to the root XML element when serializing an object

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

谢谢!

第一

假设您有一个具体的类而不是一个匿名类,则将您的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类将为您提供所需的输出,还请注意,如果最终结果不符合要求,则可能需要将XML标记添加到ValueA / B / C类。

第二个将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");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM