C# 为什么XmlTextReader调用不受支持的流时失败。长度?
我有一个XmlTextReader,并在System.Net.ConnectStream中传递它。如果我进入调试器,我可以看到ConnectStream不支持Length属性,这会引发NotSupportedException 现在,我将Stream子类化,并传入我的类的一个实例。我的类还对长度为的get()访问器抛出NotSupportedException,但这次我所有的单元测试都失败了,出现了NotSupportedException XmlTextReader文档没有说它需要流支持长度,而且它显然可以使用不需要的流支持长度-发生了什么事?C# 为什么XmlTextReader调用不受支持的流时失败。长度?,c#,.net,xmltextreader,C#,.net,Xmltextreader,我有一个XmlTextReader,并在System.Net.ConnectStream中传递它。如果我进入调试器,我可以看到ConnectStream不支持Length属性,这会引发NotSupportedException 现在,我将Stream子类化,并传入我的类的一个实例。我的类还对长度为的get()访问器抛出NotSupportedException,但这次我所有的单元测试都失败了,出现了NotSupportedException XmlTextReader文档没有说它需要流支持长度,
(这是.NET 3.5客户端)如果
流
从返回true,则假定长度
、设置长度
、位置
和搜索
都受支持。一些代码可能会测试CanSeek
,并使用结果优化其行为-这里似乎就是这样。当您从CanSeek
返回true
,然后在Length
中抛出异常时,这就打破了流
中没有很好记录的契约
如果您不支持
Length
属性,最好从CanSeek
返回false
,您的流返回什么?如果您能提供一个简短但完整的程序来演示这个问题,这将非常有帮助。您是否尝试过XmlDocument。如果您不使用大块XML,则非常容易使用。@JonSkeet-我的流返回的CanSeek与ConnectStream不同,是true(它可以,在它已经拥有的数据中,它只是不知道它可以接收多少数据)。如果我将其更改为false,XmlTextReader可以正常工作。谢谢你的指点!如果你加上这个作为回答,我会接受。@B先生,我实际上是在使用XmlSerialiser,传入一个XmlTextReader(为了使用反序列化()方法),但感谢您对XmlDocument的介绍,我会在将来的应用程序中记住这一点。@B先生:它不像LINQ to XML那么容易使用,在我看来,我会在一周中的任何一天接受XDocument而不是XmlDocument,特别是在涉及名称空间的情况下。