首页 > 解决方案 > C# 将对象序列化为 SOAP 字符串数组问题

问题描述

我有一个问题,尝试将包含字符串数组的对象序列化为soap会导致我的应用程序出现异常。我正在执行以下操作来创建肥皂格式化程序:

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

当我在序列化程序上调用 Serialize 时,出现以下异常。“状态 Epilog 中的令牌 StartElement 将导致无效的 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;
    }

标签: c#serializationsoap

解决方案


推荐阅读