.net 4とC#で。 XMLストリームをオブジェクトに逆シリアル化する静的メソッドを実装しました。これは、1つのオブジェクトに入るXMLフォーマットの1つのみです。そのため、私はそれを気にすることは何もしていません。私はこのXMLコンテンツをさまざまな方法で取得できるので、静的メソッドに渡されるパラメータをStreamオブジェクトにしたいと考えました。私はそれから、FileStream、MemoryStream、StringReaderなどの基本クラスStreamから派生したオブジェクトを取得すると思っていました。C#では、StreamReaderをStreamパラメータを持つメソッドに渡すことができないのはなぜですか?
FileStreamオブジェクトを渡すとうまく動作しますが、 。
私の静的メソッド:
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を取りますが、私はエレガントなアイデアが崩れていると思っていたのを見逃しています。なぜこれがうまくいかないか、そして/またはそれを動作させる方法に関するアイデア?ここで
これは私からnoobishと聞こえるかもしれません....しかし、あなたはどんな種類のStreamからもStringReaderを継承していますか? – Machinarius