c# – 覆盖XmlSerialization的类名

c# – 覆盖XmlSerialization的类名,第1张

概述我需要序列化IEnumerable.同时我想要根节点是“通道”和第二级节点 – Channel(而不是ChannelConfiguration). 这是我的串行器定义: _xmlSerializer = new XmlSerializer(typeof(List<ChannelConfiguration>), new XmlRootAttribute("Channels")); 我通过提供XmlR 我需要序列化IEnumerable.同时我想要根节点是“通道”和第二级节点 – Channel(而不是ChannelConfiguration).

这是我的串行器定义:

_xmlSerializer = new XmlSerializer(typeof(List<ChannelConfiguration>),new XmlRootAttribute("Channels"));

我通过提供XmlRootAttribute来覆盖根节点,但是我没有找到一个选项来设置Channel而不是ChannelConfiguration作为第二级节点.

我知道我可以通过引入IEnumerable的包装器和使用XmlArrayItem来做到这一点,但是我不想这样做.

解决方法 像这样:
XmlAttributeOverrIDes or = new XmlAttributeOverrIDes();or.Add(typeof(ChannelConfiguration),new XmlAttributes{    XmlType = new XmlTypeAttribute("Channel")});var xmlSerializer = new XmlSerializer(typeof(List<ChannelConfiguration>),or,Type.EmptyTypes,new XmlRootAttribute("Channels"),"");xmlSerializer.Serialize(Console.Out,new List<ChannelConfiguration> { new ChannelConfiguration { } });

请注意,您必须缓存并重新使用此序列化器实例.

我还会说,我强烈建议您使用“包装类”方法 – 更简单,没有组件泄漏的风险,并且IIRC可以在更多的平台上运行(相当确定我看到一个边缘情况,其中上述行为在某些方面有所不同实现 – SL或WP7或类似的东西).

如果您可以访问ChannelConfiguration,您还可以使用:

[XmlType("Channel")]public class ChannelConfiguration{...}var xmlSerializer = new XmlSerializer(typeof(List<ChannelConfiguration>),new XmlRootAttribute("Channels"));xmlSerializer.Serialize(Console.Out,new List<ChannelConfiguration> { new ChannelConfiguration { } });
总结

以上是内存溢出为你收集整理的c# – 覆盖XmlSerialization的类名全部内容,希望文章能够帮你解决c# – 覆盖XmlSerialization的类名所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1236341.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存