XML 文档中有错误 (1, 41)

问题描述 投票:0回答:7

当我对 xml 进行反序列化时,我收到“XML 文档中存在错误 (1, 41)”。 。谁能告诉我问题到底是什么。

 public static T DeserializeFromXml<T>(string xml)
        {
            T result;
            XmlSerializer ser = new XmlSerializer(typeof(T));
            using (TextReader tr = new StringReader(xml))
            {
                result = (T)ser.Deserialize(tr);
            }
            return result;
        }

我就是用这个函数来做的。

<?xml version='1.0' encoding='utf-16'?>
<Message>
<FirstName>Hunt</FirstName>
<LastName>DAvid</LastName>
</Message>
c# xml-serialization
7个回答
22
投票

确保您的消息类如下所示:

[Serializable, XmlRoot("Message")]
public class Message
{
    public string FirstName { get; set; }

    public string LastName { get; set; }
}

这对我来说很好:

string xml = File.ReadAllText("c:\\Message.xml");
var result = DeserializeFromXml<Message>(xml);

MSDN,XmlRoot.ElementName

生成并识别的 XML 根元素的名称 XML 文档实例。 默认是序列化的名称 班级.

因此,您的类名可能不是

Message
,这就是解串器无法使用默认行为找到它的原因。


4
投票

同意 sll 的答案,但遇到了另一个障碍,即在属性中指定了名称空间,当收到返回 xml 时,未包含名称空间,因此无法找到该类。

我必须找到一种解决方法来指定属性中的命名空间,并且它起作用了。

即。

[Serializable()]
    [XmlRoot("Patient", Namespace = "http://www.xxxx.org/TargetNamespace")]
    public class Patient

生成

<Patient xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.xxxx.org/TargetNamespace">

但我不得不将其更改为

[Serializable()]
[XmlRoot("Patient")]
public class Patient

生成为

<Patient xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

这解决了我的问题,希望对其他人有帮助。


4
投票

首先检查使用正确数据类型声明的变量。 我遇到了同样的问题,然后我检查了,错误地我将 SAPUser 声明为 int 数据类型,从而发生了错误。 还有一件事 XML 文件使用数组之类的概念存储其数据,但其第一个索引开始为 +1。 例如如果错误在(7,2) 则 始终检查第六行......


2
投票

我也有同样的事情。所有这些都归结为模式中标签名称中的“d”而不是“D”。


1
投票

在我的例子中,我需要一个 float 值,其中 xml 具有 null 值,因此请务必在 xsd 映射中搜索 float 和 int 数据类型


0
投票

在我正在从事的 WEC7 项目中,我遇到了类似的错误。我序列化的文件是从对象数组序列化出来的,所以我认为 XML 没问题。另外,我在之前的几门课程中都曾遇到过这个问题,所以这是一个相当大的谜题。

然后我在之前的工作中注意到,我序列化/反序列化的每个类都有一个默认构造函数。我失败的案例中缺少这个,所以我添加了它,瞧……它工作得很好。

我似乎记得在某处读过这是必需的。我想是的。


0
投票

我试图将十进制反序列化为浮点数,这引发了异常。始终尝试研究内部异常,因为这是通用异常。内部异常将为您提供问题的确切原因。快乐编码。

© www.soinside.com 2019 - 2024. All rights reserved.