【发布时间】:2017-12-08 01:36:43
【问题描述】:
我有一个可以自行序列化的类,例如:
[XmlRoot("NameOfMyRoot", Namespace = "myNamespace")]
public class Inner
{
public Inner(){}
public string SomeString { get; set; }
}
完美序列化为(我使用ns 别名为myNamespace,请参阅完整演示)
<?xml version="1.0" encoding="utf-16"?>
<NameOfMyRoot xmlns:ns="myNamespace">
<ns:SomeString></ns:SomeString>
</NameOfMyRoot>
现在我希望这个对象成为另一个对象(包装器)的一部分:
[XmlRoot("Root")]
public class Outer<T>
{
public T Property{ get; set; }
public Outer(){}
public Outer(T inner)
{
Property = inner;
}
}
这给了我这个:
<?xml version="1.0" encoding="utf-16"?>
<Root xmlns:ns="myNamespace">
<Property>
<ns:SomeString></ns:SomeString>
</Property>
</Root>
我想要的只是将内部对象按原样嵌入其父对象中,如下所示:
<?xml version="1.0" encoding="utf-16"?>
<Root>
<NameOfMyRoot xmlns:ns="myNamespace">
<ns:SomeString></ns:SomeString>
</NameOfMyRoot>
</Root>
请注意,命名空间不应移动到根目录,并且我不能指定元素的名称,因为会有许多不同的类型。 Fiddle with full example。
当然,我可以将它们单独序列化并通过一些讨厌的字符串操作进行组合,但我希望有一种巧妙的方法可以以某种方式实现这一点。
【问题讨论】:
-
注意:问题看起来不一致;
[XmlRoot("NameOfMyRoot", Namespace = "myNamespace")] public class Inner {...}的 xml 不是<NameOfMyRoot xmlns:ns="myNamespace">- 而是<NameOfMyRoot xmlns="myNamespace">- 这是一个巨大的差异 -
@MarcGravell 同意。对此添加了注释。
标签: c# .net xml generics serialization