2

我正在尝试使用 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

4

1 回答 1

2

请参阅本文档。

可以使用 XMLSerializer 序列化什么?

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

 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 };
 }

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

于 2020-04-30T07:36:16.340 回答