我目前正在使用XMLSerializer
来序列化我自己的类列表。类的一个属性是一个没有无参数构造函数的密封类的实例,因此XML Serializer拒绝序列化该类。我怎么能绕过这个?我需要将该属性序列化。
我有什么方法可以指定该类应该如何序列化?
我们希望继续使用XML;是否有另一个我可以使用的XML序列化器没有这个问题?
我再次道歉,如果这是一个骗局,但我不知道该搜索什么。
[编辑]为了澄清,我无法访问密封类的来源。
答案 0 :(得分:12)
不可能直接做; XmlSerializer
无法处理没有无参数构造函数的类。
我通常做的是将无参数类包装在另一个与XML兼容的类中。包装类有一个无参数构造函数和一组读写属性;它有一个FromXml
方法,可以调用真实类的构造函数。
[XmlIgnore]
public SomeClass SomeProperty { get; set; }
[XmlElement("SomeProperty")]
public XmlSomeClass XmlSomeProperty
{
get { return XmlSomeClass.ToXml(SomeProperty); }
set { SomeProperty = value.FromXml(); }
}
答案 1 :(得分:0)
你能创建一个私有的无参数构造函数吗?假设您可以访问类的代码,那将是有效的。
答案 2 :(得分:0)
您可以在包含的类上实现ISerializable
,然后实现自定义序列化程序。
答案 3 :(得分:0)
根据xml的复杂程度,可能会与DataContractSerializer
一起运气。这不提供喜欢相同级别的xml控件,但它完全绕过了构造函数。适用于私人类型。
我可能也会问:它实际上需要是xml吗? json或protobuf之类的其他序列化程序没有XmlSerializer
限制。
答案 4 :(得分:0)
使用IXmlSerializable
,XmlSerializer
太有限了。