Определенное пространство имен в десериализации XML терпит неудачу - PullRequest
0 голосов
/ 23 мая 2018

Я искал проблему, но не смог найти ответ в данном конкретном случае, поэтому вот проблема.

При попытке десериализации строки XML в объект строгого типа я получил следующее сообщение:

System.InvalidOperationException: There is an error in XML document (1, 2). ---> System.InvalidOperationException: <GetPointOfDelivery_Out xmlns='urn:webbeB2B:webservices:v0'> was not expected.
    at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderGetPointOfDelivery_Out.Read16_GetPointOfDelivery_Out()

Хотя класс, на мой взгляд, имеет правильное значение атрибута пространства имен, определенное как:

[XmlType(AnonymousType = true, Namespace = "urn:webbeB2B:webservices:v0")]
    public class GetPointOfDelivery_Out
    {
        [XmlElement("POD")]
        public POD[] POD
….
}

Исходная строка выглядит следующим образом:

<out:GetPointOfDelivery_Out xmlns:out="urn:webbeB2B:webservices:v0">
    <out:POD>
        <out:PODID>FT}UntwKNFlX0000h100Dm</out:PODID>
 ….
    </out:POD>
    <out:ErrorMessage>
        <out:MsgType>S</out:MsgType>
    </out:ErrorMessage>
</out:GetPointOfDelivery_Out>

Я использую следующий код для десериализации строки

var xmlSerializer = new XmlSerializer(typeof(T));

            using (var textReader = new StringReader(xml))
            {
                return (T)xmlSerializer.Deserialize(textReader);
                }

(Where T is GetPointOfDelivery_Out and xml the example given above.)

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 23 мая 2018

Глядя более глубоко на переполнение стека, я нашел ответ в следующем посте:

https://stackoverflow.com/a/1232328/1145146

Я добавил атрибут XmlRoot в целевой класс для десериализации

[Serializable]
[XmlRoot("GetPointOfDelivery_Out", Namespace = "urn:webbeB2B:webservices:v0")]
[XmlType(AnonymousType = true, Namespace = "urn:webbeB2B:webservices:v0")]
public class GetPointOfDelivery_Out
...