gpt4 book ai didi

c# - 以 XmlDocument 作为返回类型的 Web 方法在 asp.net 核心的 SoapCore 中失败

转载 作者:行者123 更新时间:2023-12-04 10:11:01 24 4
gpt4 key购买 nike

我正在尝试使用 SoapCore 在 asp.net 核心中托管 asmx 类型的 Web 服务。

我有一种网络方法如下。

[OperationContract]
XmlDocument testProperties();

具体实现如下。
public XmlDocument testProperties()
{
XmlDocument testProperties = new XmlDocument();
testProperties.LoadXml("<test>abc</test>");
return testProperties;
}

当我尝试访问此 Web 方法时,它失败并出现以下错误。
System.InvalidOperationException: There was an error generating the XML document.
---> System.InvalidOperationException: This element was named 'test' from namespace '' but should have been named 'TestPropertiesResult' from namespace ''.

注意:仅当方法的返回类型为 XmlDocument 时才会出现此问题。如果是字符串或其他简单数据类型,一切正常。

任何线索都会有所帮助。

编辑 1

我尝试使用 TestPropertiesResult 重命名测试,但这也没有解决任何问题。只有错误消息更改为
System.InvalidOperationException: There was an error generating the XML document.
---> System.InvalidOperationException: This element was named 'TestPropertiesResult' from namespace '' but should have been named 'TestPropertiesResult' from namespace ''.

编辑 2

在 SoapCore 中进一步分析后,我可以缩小根本原因。
当 XmlSerializer 创建的 XmlDocument 发生序列化时,就会出现此问题
XmlSerializer ser = new XmlSerializer(typeof(XmlDocument), null, new Type[0], new XmlRootAttribute("dummynode"), "testnamespace");

我尝试将其更改为以下
XmlSerializer ser = new XmlSerializer(typeof(XmlDocument));

然后它可以工作,但缺少根元素。我无法改变它。我只能改变 XmlDocument .

最佳答案

请参阅本文档。

What can be serialized using XMLSerializer ?

根据文档将 XMLDocument 类包装为公共(public)成员。

 public class Wrapper
{
public XmlDocument XmlDocument { get; set; }
}
public static Wrapper testProperties()
{
XmlDocument testProperties = new XmlDocument();
testProperties.LoadXml("<test>abc</test>");
return new Wrapper { XmlDocument = testProperties };
}

我希望这能解决你的问题。

关于c# - 以 XmlDocument 作为返回类型的 Web 方法在 asp.net 核心的 SoapCore 中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61338826/

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