大家都知道,序列化的时候
public List<MyClass> A{get;set;};
class MyClass{
public string B{get;set;}
}
会序列化为
<A>
<MyClass>
<B>string1</B>
</MyClass>
<MyClass>
<B>string2</B>
</MyClass>
<MyClass>
...
</MyClass>
</A>
可是我现在希望不要有<A>和</A>这个XmlArrayAttribute,即序列化之后是
<MyClass>
<B>string1</B>
</MyClass>
<MyClass>
<B>string2</B>
</MyClass>
<MyClass>
...
</MyClass>
应该如何做?望解答,感谢!
[XmlRoot("root")]
Class MyClass1
{
public List<MyClass> A{get;set;};
}
class MyClass
{
public string B{get;set;}
}
序列化以后是
<root>
<A>
<MyClass>
<B>string1</B>
</MyClass>
<MyClass>
<B>string2</B>
</MyClass>
<MyClass>
...
</MyClass>
</A>
</root>
现在希望序列化成
<root>
<MyClass>
<B>string1</B>
</MyClass>
<MyClass>
<B>string2</B>
</MyClass>
<MyClass>
...
</MyClass>
</root>
1,从 List<MyClass> 继承一个新类;
2,不使用List<>,直接使用MyClass[]数组;
3,使用XmlElement标记;
[XmlRoot("root")]
public class MyClass1 {
[XmlElement("MyClass")]
public List<MyClass> A { get; set; }
}
public class MyClass {
public string B { get; set; }
}
class Program {
static void Main(string[] args) {
MyClass1 root = new MyClass1();
root.A = new List<MyClass>(new MyClass[] { new MyClass { B = "string1" }, new MyClass { B = "string2" } });
using(MemoryStream ms = new MemoryStream()) {
XmlSerializer serializer = new XmlSerializer(typeof(MyClass1));
serializer.Serialize(ms, root);
ms.Seek(0, SeekOrigin.Begin);
Console.WriteLine(Encoding.Default.GetString(ms.ToArray()));
}
Console.Read();
}
}
如果你是想去掉根那是不可能的,因为xml必须满足树形结构。希望你能进一步说明问题。
想用内置的实现,就得守默认的规则,否则自己直接拼字符串,那才是万能的方法。
或者将序列后的结果,把<A>替换成<Root>,把</A>替换成</Root>,这个很容易。
虽然没看你具体的要求,希望下面的方法能帮助你:
自定义xmlSerialization规则
xmlRootAttribute、xmlAttributeAttribute、xmlElementAttribute