【发布时间】:2021-04-05 19:00:06
【问题描述】:
我目前有一个基于 .Net Core 2.2 的应用程序,它可以工作。我需要将此项目移至 .Net Core 3.1,但我似乎无法在控制器中获取 XML 反序列化。在这两个应用程序中,我成功创建了 WCF 连接服务。 WDSL 现在定义了更多类,但基本相同。我区分了文件和 左边是新生成的填充:
< [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "2.0.2")]
---
> [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "2.0.1-preview-30310-0943")]
这对 Reference.cs 中的每个类都重复。我的问题是我的邮递员测试在新控制器上失败了。通过使用 Calculatus Eliminatus,我设法找出了差异,旧的解析可以接受:
<?xml version="1.0" encoding="UTF-8"?>
<ConnectedServiceRequestX xmlns="http://somename.com/api/01">
<Timestamp>2021-04-05T16:35:43</Timestamp>
<ApiKey>TopSecretKey</ApiKey>
<CustomerId>ABC</CustomerId>
</ConnectedServiceRequestX>
新的解析器只有在发布的 XML 是这样的情况下才能工作:
<?xml version="1.0" encoding="UTF-8"?>
<ConnectedServiceRequestX>
<Timestamp xmlns="http://somename.com/api/01">2021-04-05T16:35:43</Timestamp>
<ApiKey xmlns="http://somename.com/api/01">TopSecretKey</ApiKey>
<CustomerId xmlns="http://somename.com/api/01">ABC</CustomerId>
</ConnectedServiceRequestX>
将 xmlns="http://somename.com/api/01" 放在类级别的 XML 项时,新的解析器会引发异常。我需要支持较旧的 XML 输入,因为我没有访问我们服务的系统的所有权。在这种情况下,一家大公司决定了他们将用来访问我们的数据的界面,而我们是一家小公司。
我倾向于认为我可以为 .XmlSerializerFormatters() 提供一些选项,这样 xmlns 将默认使用类级别 XML 项上提供的命名空间。任何帮助表示赞赏。
【问题讨论】:
标签: c# xml asp.net-mvc asp.net-core