我有两个类,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; }
}
}
答案 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>
希望这就是你想要的。