我正在尝试使用以下代码反序列化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
进行阅读,则可以正常使用。不确定,我需要做出哪些改变
答案 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中有完整的示例。