【问题标题】:Adding an attribute to the root XML element when serializing an object序列化对象时向根 XML 元素添加属性
【发布时间】:2018-11-26 14:52:00
【问题描述】:

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

谢谢!

【问题讨论】:

  • 您想(可以)向 MyProgram 添加一个 Version 属性吗?
  • 是的,我想向 MyProgram 添加一个 Version 属性,但我不确定如何。

标签: c# xml


【解决方案1】:

第一

假设你有一个具体的类而不是一个匿名的类,修改你的 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 字符串/创建它,然后设置版本属性

XElement x = XElement.Load("Your XML location");
var yourRoot = x.Descendants("MyProgram").FirstOrDefaul();
yourRoot.SetAttributeValue("Version","1.0");
yourRoot.Save("Your XML location");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 2013-01-28
    • 1970-01-01
    相关资源
    最近更新 更多