XmlTextWriter继承和强制转换异常
本文关键字:转换 异常 继承 XmlTextWriter | 更新日期: 2023-09-27 17:59:09
我想用很多自定义方法创建XmlTextWriter的扩展,以写下我在自己的文件格式中使用的类和结构(我不想使用序列化,因为有时标记嵌套可能是非常深层的,所以定义所有XmlElement属性并创建所有必要的投影会非常乏味)。以下是我所做的:
public sealed class MySpecialWriter : XmlTextWriter
{
private static readonly XmlWriterSettings s_DefaultSettings = new XmlWriterSettings
{
CloseOutput = true,
Encoding = new UTF8Encoding(false),
Indent = true,
IndentChars = "'t",
NewLineChars = Environment.NewLine,
NewLineHandling = NewLineHandling.Replace,
OmitXmlDeclaration = false,
};
public MySpecialWriter(Stream output, Encoding encoding) : base(output, encoding) { }
public MySpecialWriter(String output, Encoding encoding) : base(output, encoding) { }
public MySpecialWriter(TextWriter output) : base(output) { }
public static MySpecialWriter Initialize(StringBuilder sb)
{
return (MySpecialWriter)Create(sb, s_DefaultSettings);
}
public void WriteMyClass(MyClass value)
{
...
}
}
当我尝试使用它时(只是一个简单的测试,看看它是否有效):
StringBuilder sb = new StringBuilder();
try
{
using (MySpecialWriter writer = MySpecialWriter.Initialize(sb))
{
writer.WriteProcessingInstruction("xml", "version='1.0' encoding='UTF-8'");
writer.WriteMyClass(value)
writer.Flush();
}
}
catch (Exception e)
{
return null;
}
return sb.ToString();
我从"初始化"方法中得到以下异常:
无法将"System.Xml.XmlWellFormedWriter"类型的对象强制转换为"System.Xml.Xml TextWriter"类型。
你能帮我吗?
执行此操作时:
return (MySpecialWriter)Create(sb, s_DefaultSettings);
Create
指的是XmlWriter.Create
方法,该方法返回XmlTextWriter
的实例,而不是MySpecialWriter
的实例,因此强制转换失败。您应该只使用new
来创建类的实例。
无论如何,我不认为您真的需要在这里继承XmlTextWriter
(除非您特别需要使用XmlTextWriter
的受保护方法,这是不可能的)。您可以通过为XmlWriter
编写扩展方法来获得相同的结果。