我目前正在使用 anXMLSerializer
来序列化我自己的一个类的列表。该类的属性之一是没有无参数构造函数的密封类的实例,因此 XML 序列化器拒绝序列化该类。我怎样才能解决这个问题?我需要对该属性进行序列化。
我有什么方法可以指定该类应该如何序列化?
我们希望继续使用 XML;是否有另一个我可以使用的不会出现此问题的 XML 序列化程序?
再次,如果这是一个骗局,我很抱歉,但我不知道要搜索什么。
[编辑]澄清一下,我无权访问密封类的来源。
我目前正在使用 anXMLSerializer
来序列化我自己的一个类的列表。该类的属性之一是没有无参数构造函数的密封类的实例,因此 XML 序列化器拒绝序列化该类。我怎样才能解决这个问题?我需要对该属性进行序列化。
我有什么方法可以指定该类应该如何序列化?
我们希望继续使用 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
限制的序列化程序。
使用IXmlSerializable
,XmlSerializer
太有限了。