Сбой веб-метода с XmlDocument в качестве возвращаемого типа в SoapCore в ядре asp. net - PullRequest
1 голос
/ 21 апреля 2020

Я пытаюсь разместить веб-службу типа asmx в ядре asp. net, используя SoapCore.

У меня есть один веб-метод следующим образом.

[OperationContract]
XmlDocument testProperties();

и конкретная реализация для этого следующим образом.

public XmlDocument testProperties()
{
    XmlDocument testProperties = new XmlDocument(); 
    testProperties.LoadXml("<test>abc</test>");
    return testProperties;
}

Когда я пытаюсь получить доступ к этому веб-методу, происходит сбой со следующей ошибкой.

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 я могу сузить причину root. Эта проблема возникает, когда происходит сериализация XmlDocument с помощью XmlSerializer, созданного как

XmlSerializer ser = new XmlSerializer(typeof(XmlDocument), null, new Type[0], new XmlRootAttribute("dummynode"), "testnamespace");

. Я попытался изменить его на следующий

XmlSerializer ser = new XmlSerializer(typeof(XmlDocument));

, затем он работает, но элемент root отсутствует. Я не могу это изменить. Я могу изменить только XmlDocument.

1 Ответ

1 голос
/ 30 апреля 2020

Пожалуйста, обратитесь к этой документации.

Что можно сериализовать с помощью XMLSerializer?

Согласно документации, оберните класс XMLDocument в член publi c.

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

Надеюсь, это решит вашу проблему.

...