Csharp/C#教程:如何使用无参数构造函数XML序列化密封类?分享


如何使用无参数构造函数XML序列化密封类?

我目前正在使用XMLSerializer来序列化我自己的类的列表。 类的一个属性是一个没有无参数构造函数的密封类的实例,因此XML Serializer拒绝序列化该类。 我怎么能绕过这个? 我需要将该属性序列化。

有什么方法可以指定该类应该如何序列化?

我们想继续使用XML; 是否有另一个我可以使用的XML序列化器没有这个问题?

我再次道歉,如果这是一个骗局,但我不知道该搜索什么。

[编辑]为了澄清,我无法访问密封类的来源。

不可能直接做; XmlSerializer无法处理没有无参数构造函数的类。

我通常做的是将无参数类包装在另一个与XML兼容的类中。 包装类有一个无参数构造函数和一组读写属性; 它有一个FromXml方法,可以调用真实类的构造函数。

 [XmlIgnore] public SomeClass SomeProperty { get; set; } [XmlElement("SomeProperty")] public XmlSomeClass XmlSomeProperty { get { return XmlSomeClass.ToXml(SomeProperty); } set { SomeProperty = value.FromXml(); } } 

你能创建一个私有的无参数构造函数吗? 假设您可以访问类的代码,那将是有效的。

您可以在包含的类上实现ISerializable ,然后实现自定义序列化程序。

根据xml的复杂性,您可能会对DataContractSerializer感到满意。 这不提供类似于 xml控件的任何级别,但它完全绕过了构造函数。 适用于私人类型。

我也可能会问:它实际上需要是xml吗? 还有其他序列化程序,如json或protobuf,没有XmlSerializer限制。

使用IXmlSerializableXmlSerializer太有限了。

上述就是C#学习教程:如何使用无参数构造函数XML序列化密封类?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/943423.html

(0)
上一篇 2021年11月14日
下一篇 2021年11月14日

精彩推荐