C # Сериализация объекта для SOAP строки массива проблема - PullRequest
0 голосов
/ 19 октября 2018

У меня проблема, когда попытка сериализации объекта, содержащего строковый массив, в мыло вызывает исключение в моем приложении.Я делаю следующее для создания средства форматирования мыла:

XmlTypeMapping mapping = new SoapReflectionImporter().ImportTypeMapping(obj.GetType());
        XmlSerializer serializer = new XmlSerializer(mapping);

, когда я вызываю Serialize на сериализаторе, я получаю следующее исключение.«Токен StartElement в состоянии Epilog приведет к неверному XML-документу.»

Однако, если я просто хочу обычный xml и создаю свой XmlSerializer следующим образом:

XmlSerializer serializer = new XmlSerializer(obj.GetType());

Все отлично работает и xmlсодержит массив строк.

У меня есть полный пример ниже, который воспроизводит проблему на моей машине, если кто-то может взглянуть, я был бы очень благодарен, поскольку у меня нет идей!

 static void Main(string[] args)
    {
        GetAlarmEventTypesResponse bob = new GetAlarmEventTypesResponse();
        bob.GetAlarmEventTypesTypes = new string[] { "bob", "bob1", "bob2" };
        bob.version = "2.0";


        // works
        string xml = GetRegularDocument(bob);
        Console.WriteLine(xml);

        // throws exception
        string soap = GetSoapDocument(bob);
        Console.WriteLine(soap);
    }

    //------------------------------------------------------------------------------

    [System.Xml.Serialization.SoapTypeAttribute(Namespace = "http://example/common/dataexchange/2011/05")]
    public class GetAlarmEventTypesResponse
    {
        public GetAlarmEventTypesResponse()
        {
            version = "1.2";
        }

        [System.Xml.Serialization.XmlArrayItemAttribute("Type", IsNullable = false)]
        public string[] GetAlarmEventTypesTypes { get; set; }

        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string version { get; set; }
    }

    //------------------------------------------------------------------------------

    public static string GetRegularDocument(object obj)
    {
        string document = null;

        XmlSerializer serializer = new XmlSerializer(obj.GetType());

        using (StringWriter textWriter = new StringWriter())
        {
            serializer.Serialize(textWriter, obj);
            document = textWriter.ToString();
        }
        return document;
    }

    //------------------------------------------------------------------------------

    public static string GetSoapDocument(object obj)
    {
        string document = null;

        XmlTypeMapping mapping = new SoapReflectionImporter().ImportTypeMapping(obj.GetType());
        XmlSerializer serializer = new XmlSerializer(mapping);

        using (StringWriter textWriter = new StringWriter())
        {
            serializer.Serialize(textWriter, obj);
            document = textWriter.ToString();
        }
        return document;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...