14

我有一个要反序列化的 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);
4

4 回答 4

35

将 StringReader 替换为 StreamReader ,它将正常工作。StringReader 从字符串中读取值(在您的情况下是文件名)。

于 2011-01-18T17:03:17.383 回答
2

我只是有相同的错误信息,但不同的错误来源。万一有人和我有同样的问题。我通过拆分字符串切掉了char我的第一个 xml 字符串。并且 xml 字符串已损坏:

"?xml version="1.0" encoding="utf-16"?> ..." // my error
"<?xml version="1.0" encoding="utf-16"?> ..." // correct

(1,1) 基本上表示第一行的第一个字符不正确,字符串无法反序列化。

于 2013-09-25T11:43:08.837 回答
0

在您的 CommonMessage 类中包含带有 xmlroot 的 XmlRoot 元素标记,例如:[XmlRoot("UIIVerificationResponse")]

于 2017-06-19T07:32:42.667 回答
0

您应该在 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());
        }
于 2022-03-02T22:36:25.493 回答