【发布时间】:2010-12-08 02:19:10
【问题描述】:
在 .net 4 和 C# 中。我已经实现了一个静态方法来将 XML 流反序列化为对象。这只是进入一个对象的一种 xml 格式,所以我不想对此做任何花哨的事情。由于我可以通过多种方式获取此 XML 内容,因此我想将传递给静态方法的参数设为 Stream 对象。我原以为它会采用从基类 Stream 派生的任何对象——比如 FileStream、MemoryStream、StringReader 等。
当我向它传递一个 FileStream 对象时它工作正常,但当我向它传递一个 StringReader 时它就不行了。
我的静态方法:
public static MatchObj DeserializeMatch(Stream srXml)
{
XmlSerializer xs = new XmlSerializer(typeof(MatchObj));
MatchObj mObj = (MatchObj)xs.Deserialize(srXml);
return mObj;
}
它适用于 FileStream:
MatchObj objReply;
using (FileStream fs = new FileStream(Server.MapPath("/App_Data/Match.xml"), FileMode.Open))
{
objReply = MStatic.DeserializeMatch(fs);
fs.Close();
}
但不是 StringReader:
StringReader sr = new StringReader(Request.Form["mXML"]);
MatchObj objReply = MStatic.DeserializeMatch(sr);
构建错误是:“无法从 'System.IO.StringReader' 转换为 'System.IO.Stream'”
这本身是有道理的,但我认为既然 StringReader 实现了 TextReader,它算作 Stream? XML Deserializer 两者都可以正常工作。
我只是通过重载该方法来获取 StringReader 来解决它,但我讨厌看到我认为是一个优雅的想法崩溃了。关于为什么这不起作用的任何想法,和/或使它起作用的方法?
【问题讨论】:
-
这对我来说可能听起来很无聊......但你确定 StringReader 继承自任何类型的 Stream 吗?