将类变量序列化为xml而不创建新元素

时间:2010-09-20 11:14:09

标签: c# xml-serialization

我有两个类,A和B.A有一个B的实例,当序列化A时,我希望B与A处于同一级别而不是子元素。

所以我希望生成的xml成为

    <a>
      <avalue>a</avalue>
      <bvalue>b</bvalue>
    </a>

这个程序把B放在它自己的元素中

    <a>
      <avalue>a</avalue>
      <b>
        <bvalue>b</bvalue>
      </b>
    </a>
public class A
{
    public string avalue = "a";
    public B b = new B();
}

public class B
{
    public string bvalue = "b";
}

class Program
{
    static void Main(string[] args)
    {
        var a = new A();
        var xml = new XmlSerializer(a.GetType());
        xml.Serialize(new StreamWriter(@"c:\temp\tmp.xml"), a);
    }
}

PS:以前一定要问过,但我不确定要搜索什么。我的google-fu空了......

编辑:

如果可能的话,我希望避免使用“包装”解决方案:

public class A
{
    public string avalue = "a";

    [XmlIgnore]
    public B b { get; set; }

    [XmlElement("bvalue")]
    public string bvalue
    {
        get { return b.bvalue; }
        set { b.bvalue = value;  }
    }
}

2 个答案:

答案 0 :(得分:0)

您需要创建B属性并使用XMLAttribute标记它。

答案 1 :(得分:0)

Arseny的回答是正确的,虽然它有点含糊不清,所以这里需要改变:

public class B
{
      [XmlAttribute]
      public string bvalue = "b";
}

那产出:

<?xml version="1.0" encoding="utf-8"?>
<A>
  <avalue>a</avalue>
  <b bvalue="b" />
</A>

希望这就是你想要的。