C#将对象序列化为SOAP字符串数组问题

时间:2018-10-19 13:24:32

标签: c# serialization 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;
    }

0 个答案:

没有答案