XML序列化添加元素与属性

时间:2019-06-18 08:13:01

标签: c# xml serialization

我有两节课:

public class A
{
    [XmlElement("Content")]
    public B SomeName { get; set; }
}

public class B
{
    [XmlAttribute]
    public int X { get; set; }
}

它像这样序列化为xml:

<A>
  <Content X="5" />
</A>

我想在Content中指定元素名称,并得到类似的内容

<A>
  <Content>
      <Some element X="5" />
  </Content>
</A>

我可以在不创建新类的情况下做到这一点吗?使用标准的xml序列化,巫婆将包含B吗?

1 个答案:

答案 0 :(得分:0)

您拥有的一个选择是,将类SomeName中的A属性声明为B类型的对象的集合,然后使用[XmlArray]和{{ 1}}属性。

这是一个可行的示例。请注意,我已将属性[XmlArrayItem]更改为SomeName

SomeNames

此示例产生的结果将是您所期望的:

[Serializable]
public class A
{
    [XmlArray("Content")]
    [XmlArrayItem("Some")]
    public List<B> SomeNames { get; set; } = new List<B>();
}

public class B
{
    [XmlAttribute(AttributeName = "element")]
    public int X { get; set; }
}

public static void XmlSerialize()
{
    var a = new A {SomeNames = new List<B> {new B() {X = 5}}};
    var serializer = new XmlSerializer(typeof(A));
    var settings = new XmlWriterSettings() {Indent = true};
    using var stream = XmlWriter.Create("serialized.xml", settings);
    serializer.Serialize(stream, a);
}