Sib*_*Guy 9 .net serialization xml-serialization
目前XmlSerializer产生以下结构:
<config>
<BaseType xsi:type="DerivedType1" />
<BaseType xsi:type="DerivedType2" />
</config>
Run Code Online (Sandbox Code Playgroud)
有没有办法让它将类型名称放入节点:
<config>
<DerivedType1 />
<DerivedType2 />
</config>
Run Code Online (Sandbox Code Playgroud)
?
Tam*_*ely 26
使用XmlElementAttribute构造函数重载(string elementName, Type type).它允许您替换在成员中找到的实际类型的元素名称.如果您有多个派生类型,请将其中的几个堆叠在一起.
如果您尝试序列化List<Base>可能包含Derived实例的泛型集合,则以XmlArrayItem相同的方式使用它.
以这种方式定义也隐式地使派生类型已知,因此XmlInclude不需要属性
样本定义:
[XmlRoot]
public class Data
{
[XmlElement("Derived1", typeof(Derived1))]
[XmlElement("Derived2", typeof(Derived2))]
public Base foo { get; set; }
[XmlArrayItem("Derived1", typeof(Derived1))]
[XmlArrayItem("Derived2", typeof(Derived2))]
public List<Base> fooList { get; set; }
}
public class Base { ... }
public class Derived1 : Base { ... }
public class Derived2 : Base { ... }
Run Code Online (Sandbox Code Playgroud)
那么您可以使用 XmlElement 属性覆盖元素名称,例如
[XmlElement("DerivedType1")]
public BaseType : DerivedType1 {get;set;}
Run Code Online (Sandbox Code Playgroud)
if 仍然会输入 xsi:type ,并产生更大的混乱......
你的班级是什么样的?