尝试反序列化XML文件时出现异常

7
我正在尝试使用XmlSerializer反序列化一个XML文件,但是我遇到了以下异常:

"XML文档(1,2)存在错误"。内部异常是:"未预期出现<Mymessage xmlns='http://MyMessages/'>"。

这是在XML文件的第一行。我猜测这可能与xmlns有关。我尝试通过谷歌搜索来解决问题,然后尝试将以下代码添加到我的代码中:
[XmlRoot("MyMessage", Namespace="'http://MyMessages/")]

但我仍然会得到相同的异常。

请问您能分享一下XML文件中相关的部分吗? - Michael Piendl
这是一个老问题,但重要的是要知道,同样的错误可能是由于一个类缺少 Serializable 属性而生成的。 - Adam Caviness
4个回答

8
在XmlSerializer的构造函数中,我需要指定一个默认命名空间,在这样做之后,一切都正常运行了。

5
你能否给出一个代码示例,说明你是如何解决这个问题的?我认为我也遇到了同样的问题,但指定默认命名空间并没有改变任何情况。 - Jon

3
请提供完整的XML文件代码以更好地理解问题。
同时将此作为XML文件的第一行,并查看是否解决了问题。
 <?xml version="1.0" encoding="utf-8"?>

我强烈建议在所有可互操作的网络服务工作中使用“utf-8”,而不是“iso-8859-1”! - marc_s

2

回应CruelIO的建议,我通过添加以下内容解决了错误:

[XmlRoot("RenderResult", Namespace = "http://mynamespace.uri.org")]

我试图对一个类进行反序列化。例如:序列化代码如下:

RenderResult result;
using (var memoryStream = new MemoryStream(data))
{
    var xmlSerializer = new XmlSerializer(typeof(RenderResult));
    result = (RenderResult)xmlSerializer.Deserialize(memoryStream);
}

我的类看起来是这样的:

[XmlRoot("RenderResult", Namespace = "http://mynamespace.uri.org")]
public class RenderResult
{
}

1

听起来你的xml文件出了问题。有几种简单的方法可以找出问题所在:

  • 尝试将其加载到xml查看器中
  • 或者只需确保它具有.xml扩展名并在VS或IE中加载
  • 或者运行xsd.exe

如果他们抱怨,那么xml肯定是损坏的。 如果它们正常工作并显示您的数据,则可能序列化属性有误。尝试使用"/classes"开关使用xsd.exe查看它会对其执行什么操作...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接