5

我目前正在使用 anXMLSerializer来序列化我自己的一个类的列表。该类的属性之一是没有无参数构造函数的密封类的实例,因此 XML 序列化器拒绝序列化该类。我怎样才能解决这个问题?我需要对该属性进行序列化。

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

我们希望继续使用 XML;是否有另一个我可以使用的不会出现此问题的 XML 序列化程序?

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

[编辑]澄清一下,我无权访问密封类的来源。

4

5 回答 5

12

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

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

[XmlIgnore]
public SomeClass SomeProperty { get; set; }

[XmlElement("SomeProperty")]
public XmlSomeClass XmlSomeProperty
{
    get { return XmlSomeClass.ToXml(SomeProperty); }
    set { SomeProperty = value.FromXml(); }
}
于 2010-08-24T18:31:52.403 回答
0

你能做一个私有的无参数构造函数吗?假设您可以访问该类的代码,这将起作用。

于 2010-08-24T18:31:27.833 回答
0

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

于 2010-08-24T18:33:26.183 回答
0

根据 xml 的复杂性,您可能会对DataContractSerializer. 这不提供任何类似xml 控制的相同级别,但它完全绕过了构造函数。并且适用于私有类型。

我可能还会问:它真的需要是 xml 吗?对于 json 或 protobuf 之类的东西,还有其他没有XmlSerializer限制的序列化程序。

于 2010-08-24T18:38:32.797 回答
0

使用IXmlSerializableXmlSerializer太有限了。

于 2010-08-24T18:52:03.737 回答