XML 文档中的反序列化错误(1,1)
Posted
技术标签:
【中文标题】XML 文档中的反序列化错误(1,1)【英文标题】:Deserialization error in XML document(1,1) 【发布时间】:2011-06-11 04:54:29 【问题描述】:我有一个要反序列化的 XML 文件,有趣的是 XML 文件被序列化了 使用以下代码:
enter code here
var serializer = new XmlSerializer(typeof(CommonMessage));
var writer = new StreamWriter("OutPut.txt");
serializer.Serialize(writer, commonMessage);
writer.Close();
我正在尝试再次反序列化它以检查输出是否与输入匹配。 无论如何,这是我要反序列化的代码:
var serializer = new XmlSerializer(typeof(CommonMessage));
var reader = new StringReader(InputFileName);
CommonMessage commonMessage = (CommonMessage)serializer.Deserialize(reader);
【问题讨论】:
您是否使用一种编码对其进行了序列化,现在尝试使用另一种编码进行反序列化? 不,这是我使用的序列化 var serializer = new XmlSerializer(typeof(CommonMessage)); var writer = new StreamWriter("OutPut.txt"); serializer.Serialize(writer, commonMessage); writer.Close(); @jprbest - 如果您想添加信息,请编辑问题并在此处添加详细信息而不是评论。 好的对不起我现在就写 根据我的经验,(1,1) 处的错误最常见的原因是我用记事本打开文档时不小心在顶部放置了空格或换行符。 【参考方案1】:用 StreamReader 替换 StringReader 就可以了。 StringReader 从字符串中读取值(在您的情况下是文件名)。
【讨论】:
这是问题所在,因为流读取器/写入器使用 UTF 8 编码/解码,而字符串读取器/写入器使用 UTF 16 编码/解码 非常感谢!这是一个非常微妙的错误,确保您可以搜索很长时间而不会发现问题... 对我来说效果很好。也不得不忽略 DtDProcessing。【参考方案2】:我只是收到相同的错误消息,但错误来源不同。万一有人和我有同样的问题。我通过拆分字符串切掉了我的 xml 字符串的第一个 char
。并且 xml 字符串已损坏:
"?xml version="1.0" encoding="utf-16"?> ..." // my error
"<?xml version="1.0" encoding="utf-16"?> ..." // correct
(1,1) 基本上表示第一行的第一个字符不正确,字符串不能反序列化。
【讨论】:
【参考方案3】:在您的 CommonMessage 类中包含带有 xmlroot 的 XmlRoot 元素标记,例如:[XmlRoot("UIIVerificationResponse")]
【讨论】:
【参考方案4】:您应该像这样在 StreamWriter 构造函数中禁用顺序标记:
UTF8 编码(假)
完整样本:
using (MemoryStream stream = new MemoryStream())
using (StreamWriter writer = new StreamWriter(stream, new UTF8Encoding(false)))
xmlSerializer.Serialize(writer, objectToSerialize, ns);
return Encoding.UTF8.GetString(stream.ToArray());
【讨论】:
以上是关于XML 文档中的反序列化错误(1,1)的主要内容,如果未能解决你的问题,请参考以下文章
如何在 .NET 中的反序列化期间指定 XML 序列化属性以支持命名空间前缀?