环境使得必须在 Mono 上运行 .NET 3.5 应用程序。该应用程序不使用特殊库,而是严重依赖 XML 序列化器来加载复杂的模型。
具体我有以下情况,XML语句如下:
<compare-clause>
<first-element />
<second-element />
</compare-clause>
虽然第一个元素和第二个元素可以是几种不同的类型,但顺序很重要,因为它定义了哪个是左操作数,哪个是右操作数。这在 MS 上总是可以正常工作,但在 Mono(带有一些元素)上会有非常奇怪的行为。Mono 忽略分配第一个属性,将第一个元素分配给目标对象的第二个属性,并完全忽略 XML 的第二个元素。
类上的 XML 注释如下所示:
[XmlElement("first-element"), Type=typeof(FirstElementType), Order=1]
[XmlElement("second-element"), Type=typeof(SecondElementType), Order=1]
public ElementBase Left { ... }
[XmlElement("first-element"), Type=typeof(FirstElementType), Order=2]
[XmlElement("second-element"), Type=typeof(SecondElementType), Order=2]
public ElementBase Right { ... }
正如我所说,它在某些情况下不起作用,有时交换顺序会有所帮助,尽管所有类型具有相同的结构并且两个属性的注释相同,除了 Order=1,2。这一直适用于 MS .NET。如果注释上的第一个元素在第二个元素之前,则可能与此有关,尽管根据一般属性规范,这应该是完全无关的(顺序无关紧要)。
也许这仍然是 Mono XML Serialzer 的一个错误,或者我滥用了它,它只适用于 MS。尽管如此,我必须使用最新版本的 XML Serializer(2013 年 1 月)才能让应用程序正常工作!
我将不胜感激这方面的提示。此致