反序列化XML会引发错误

时间:2014-08-08 17:27:27

标签: c# xml

我正在尝试使用以下代码反序列化xml

var reader = new StringReader(uri);
var serializer = new XmlSerializer(typeof(livescore));
var livescores = (livescore)serializer.Deserialize(reader);

其中'fileToRead'包含从哪里加载xml的url。但是当它厌烦反序列化时,会抛出错误

Data at the root level is invalid. Line 1, position 1

我看了一篇关于这个问题的帖子,但没有一个技巧适合我。有什么建议吗?

如果我将响应复制到文件中并使用StreamReader而非StringReader进行阅读,则可以正常使用。不确定,我需要做出哪些改变

1 个答案:

答案 0 :(得分:1)

StringReader constructor接受它应处理的字符串,文件名。最有可能的是,您传入的是文件名,而XmlSerializer则尝试将其解析为XML - 而不是文件的内容,而是其名称。 (更新:无论是文件名还是URI,原则都是一样的。)

而是使用StreamReader接受its constructor中的文件名。然后你的其余代码应该可以工作:

var reader = new StreamReader(fileToRead);
var serializer = new XmlSerializer(typeof(livescore));
var livescores = (livescore)serializer.Deserialize(reader);

另请注意,您应该将代码正确地包装到using语句中以正确管理资源:

using (var reader = new StreamReader(fileToRead))
{
    … deserialization code goes here …
}

更新使用WebRequest.Create(uri)创建阅读器,使用GetResponse检索回复。在MSDN here中有完整的示例。

相关问题