XmlSerializer在不同的机器上生成略有不同的XML

时间:2018-02-16 13:50:16

标签: c# .net-4.0 xmlserializer

我有一个最近需要维护的旧C#.net4项目,其中一个将序列化对象与“主要”XML字符串进行比较的单元测试由于轻微的命名空间差异而开始失败,即比较字符串上的命名空间是{1=[Record(id=1, name=11), Record(id=1, name=12)], 2=[Record(id=2, name=22)], 3=[Record(id=3, name=32)], 4=[Record(id=4, name=42)], 5=[Record(id=5, name=51), Record(id=5, name=52)]} 和序列化对象xmlns:xsd。 奇怪的是,相同的单元测试在不同的机器上运行良好。

我对于为什么会发生这种情况毫无头绪。

2 个答案:

答案 0 :(得分:1)

更改测试。你不要把xmls比作字符串。

<a i="1" b="2"/>

相同
<a b="2" i="1"/>

如果你将它作为字符串进行比较它们会有所不同,但是作为xml它们是相同的。

post会帮助你。

答案 1 :(得分:1)

不知道是不是你的情况,但是,当我不得不使一些WCF与ASMX旧的webservices反向兼容时,事实证明XmlSerializer根据.NET框架上的版本工作不同,在尝试反序列化时导致异常对象或重新读取xml。

使用旧版本的旧机器的旧应用程序可能会对新机器采取不同的行为,因为即使项目针对较旧的框架,较新的应用程序也会用于详细说明某些部分。 ,例如XML。

为了进一步增加细节,我认为区别在于从2.0 .NET框架到新版本(3,3.5等)。但我不确定这一点,因为已经过了很长时间。

我再说一遍,我不知道这是不是你的情况,但这可能是一个原因。一个测试应该是在旧机器上将框架升级到与新机器相同的版本,并检查是否产生相同的输出,然后在安装新框架之前执行系统回滚到之前的状态。

检查一下: this,绝对THISthis

请告诉我这是否有用。