C# XmlTextWriter继承和强制转换异常
我想创建一个XmlTextWriter的扩展,其中包含许多自定义方法,用于以我自己的文件格式编写我使用的类和结构(我不想使用序列化,因为有时标记嵌套可能非常深入,因此定义所有XmlElement属性并创建所有必要的投影将非常繁琐)。 以下是我所做的:C# XmlTextWriter继承和强制转换异常,c#,.net,xml,inheritance,casting,C#,.net,Xml,Inheritance,Casting,我想创建一个XmlTextWriter的扩展,其中包含许多自定义方法,用于以我自己的文件格式编写我使用的类和结构(我不想使用序列化,因为有时标记嵌套可能非常深入,因此定义所有XmlElement属性并创建所有必要的投影将非常繁琐)。 以下是我所做的: public sealed class MySpecialWriter : XmlTextWriter { private static readonly XmlWriterSettings s_DefaultSettings = new
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)
{
...
}
}
当我尝试使用它时(只是一个简单的测试,看看它是否工作):
我从“Initialize”方法中得到以下异常:
无法将“System.Xml.XmlWellFormedWriter”类型的对象强制转换为“System.Xml.XmlTextWriter”类型。
您能帮我吗?当您这样做时:
return (MySpecialWriter)Create(sb, s_DefaultSettings);
Create
引用XmlWriter.Create
方法,该方法返回xmltextwitter
的实例,而不是MySpecialWriter
的实例,因此强制转换失败。您应该使用new
创建类的实例
无论如何,我不认为您真的需要在这里继承XmlTextWriter
(除非您特别需要使用XmlTextWriter
的受保护方法,这是不太可能的)。您可以通过为XmlWriter
编写扩展方法来实现相同的结果
return (MySpecialWriter)Create(sb, s_DefaultSettings);