gpt4 book ai didi

XmlSerializer 在 MSTest runner 和 NCrunch 中的行为不同

转载 作者:数据小太阳 更新时间:2023-10-29 02:51:33 26 4
gpt4 key购买 nike

我的一位同事遇到了一种情况,其中 XMLSerializer通过 MSTest Runner 或通过 NCrunch 运行时表现不同。

当通过 N-Crunch 运行测试时,输出包含

xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

当通过 MSTest Runner 运行时,输出包含

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"

xsi的顺序和 xsd是不同的。其余输出相同。

这可能是什么原因造成的?

我们不使用任何 <system.xml.serialization>配置中的设置。

最佳答案

我无法回答你原来的问题,我发现这个问题是因为我们在 MsTest 和 NUnit 上遇到了完全相同的问题,但我可以为遇到这种情况的其他人推荐一个有效的解决方法。这是使用 XML 规范化,例如:

using System.Security.Cryptography.Xml;

string canonicaliseXml(string xmlInput)
{
XmlDocument myDoc = new XmlDocument();
myDoc.LoadXml(xmlInput);
XmlDsigC14NTransform t = new XmlDsigC14NTransform();
t.LoadInput (myDoc);
var ms = (MemoryStream)t.GetOutput();
return Encoding.UTF8.GetString(ms.ToArray());
}

XML 规范化通过以下步骤规范化 XML 字符串,例如删除元素之间的空格、按字母顺序排列属性和扩展短格式空元素(在 http://en.wikipedia.org/wiki/Canonical_XML 有一个有用的解释),以便:

<root x='x'  a='a'>  <trunk>etc</trunk> <empty />  </root> 

将被规范化为

<root a="a" x="x"><trunk>etc</trunk><empty></empty></root> 

显然,这将解决 xsd 和 xsi 命名空间声明顺序的任何差异,正如我们和原始海报所经历的那样。

编辑如果您想采用安全带方法,可以将其与 http://silent-code.blogspot.co.uk/2009/09/using-xmlserializer-without-rendering.html 中的“new XmlSerializerNamespaces()”技术结合使用,它从初始序列化中过滤掉冗余的 xsd 和 xsi 命名空间声明。

关于XmlSerializer 在 MSTest runner 和 NCrunch 中的行为不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17206856/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com