c# – 如何序列化基类型集合,并在易于阅读的XML中查看具体类型
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 如何序列化基类型集合,并在易于阅读的XML中查看具体类型,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1815字,纯文字阅读大概需要3分钟。
内容图文
![c# – 如何序列化基类型集合,并在易于阅读的XML中查看具体类型](/upload/InfoBanner/zyjiaocheng/821/c7791fcbfc4e435ba03d2b89990f847e.jpg)
我有一个List,其中填充了子类BaseType的各种具体类型的对象
我正在使用WCF DataContractSerializer
<Children>
<BaseType xmlns:d3p1="http://schemas.datacontract.org/2004/07/Tasks"
i:type="d3p1:ConcreteTypeA"></BaseType>
<BaseType xmlns:d3p1="http://schemas.datacontract.org/2004/07/Tasks"
i:type="d3p1:ConcreteTypeB"></BaseType>
</Children>
有没有办法让这个生成
<Children>
<ConcreteTypeA/>
<ConcreteTypeB/>
</Children>
?
真正的目标是让用户生成一些XML以加载到内存中,并且用户具有技能级别,要求他们提供原始XML并不会成功.
解决方法:
DataContractSerializer不是为了让您控制输出而设计的.它被设计为快速,隐式,并且易于将类归类.
你想要的是XmlSerializer.这使您可以更好地控制XML输出.
请注意,在我下面的示例中,我指定了许多可以从属性名称中推断出来的东西,但只是为了让您感觉可以在属性中覆盖它们.事实上,我认为如果删除了所有属性并且应用了一些KnownTypeAttributes但我还没有测试它,那么整个类将序列化很好.我不知道这是否会为您提供您所描述的确切XML(它将在Children之上创建一个根元素),但希望这会让您朝着正确的方向前进.
Attributes That Control XML Serialization
[XmlRoot(Namespace="")]
public class MyClass {
[XmlArray("Children")]
[XmlArrayItem("ConcreteTypeA", typeof(ConcreteTypeA))]
[XmlArrayItem("ConcreteTypeB", typeof(ConcreteTypeB))]
public BaseType[] Children {
get;
set;
}
}
public class BaseType {
}
public class ConcreteTypeA : BaseType {
}
public class ConcreteTypeB : BaseType {
}
编辑:我刚测试,它产生的东西非常接近你所寻求的.
void Main()
{
var mc = new MyClass();
mc.Children = new BaseType[] {
new ConcreteTypeA(),
new ConcreteTypeB(),
new ConcreteTypeA(),
new ConcreteTypeB()
};
var serializer = new XmlSerializer(typeof(MyClass));
using ( var str = new StringWriter() ) {
serializer.Serialize(str, mc);
str.ToString().Dump();
}
}
…产生……(从顶部删除无用的xmlns)
<MyClass>
<Children>
<ConcreteTypeA />
<ConcreteTypeB />
<ConcreteTypeA />
<ConcreteTypeB />
</Children>
</MyClass>
内容总结
以上是互联网集市为您收集整理的c# – 如何序列化基类型集合,并在易于阅读的XML中查看具体类型全部内容,希望文章能够帮你解决c# – 如何序列化基类型集合,并在易于阅读的XML中查看具体类型所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。