XML反序列化 - 不期望xmlns

时间:2015-01-27 16:03:07

标签: c# xml serialization

/我在尝试反序列化xml文件时出错:

System.InvalidOperationException: There is an error in XML document (2, 2). ---> <MessageIpBNotifGetInventaire xmlns='http://www.idele.fr/XML/Schema/'> was not expected.

我的XML部分是一个问题,如下所示:

<ns2:MessageIpBNotifGetInventaire xmlns="http://www.fiea.org/types/" xmlns:ns2="http://www.idele.fr/XML/Schema/">

我的课程定义如下:

[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://www.idele.fr/XML/Schema/")]
[System.Xml.Serialization.XmlRootAttribute("MessageIpBNotifGetInventaire", Namespace = "http://www.idele.fr/XML/Schema/", IsNullable = false)]

public partial class MessageIpBNotifGetInventaire {

这是我的反序列化代码

using (MemoryStream inputStream = new MemoryStream(reponseSpecifique.MessageZip))
            {
                using (ZipFile zipFile = ZipFile.Read(inputStream))
                {
                    zipFile.Save("D:\\Test.zip");
                    foreach (ZipEntry zipEntry in zipFile)
                    {
                        using (MemoryStream outputStream = new MemoryStream())
                        {
                            zipEntry.Extract(outputStream);
                            outputStream.Position = 0;
                            using (StreamReader sr = new StreamReader(outputStream, Encoding.GetEncoding("UTF-8")))
                            {

                                XmlReader reader = XmlReader.Create(outputStream);
                                XmlSerializer serializer = new XmlSerializer(typeof(MessageIpBNotifGetInventaire));
                                MessageIpBNotifGetInventaire messageRetour = (MessageIpBNotifGetInventaire)serializer.Deserialize(reader);
                            }
                        }
                    }
                }
            }

1 个答案:

答案 0 :(得分:0)

问题在于XmlRootAttribute定义中的命名空间与XML文档本身中的命名空间不匹配。一个人最后有一个/,另一个没有。

您可能会认为,这些网址指向同一个网址,但实际上使用网址作为命名空间只是一种约定(我不会自己跟随,我更喜欢使用urn:companyname:schemas:appname或沿着那些线的东西),字符串必须完全匹配。