如何在派生自XmlObjectSerializer的类中设置XmlWriterSettings的缩进
本文关键字:XmlWriterSettings 缩进 设置 XmlObjectSerializer 派生 | 更新日期: 2023-09-27 18:26:54
我正在扩展XmlObjectSerializer
,我想配置它的缩进,但它在XmlWriterSettings
成员内部,并且是只读的。从文档中我可以看到,只有在创建XmlWriter
实例时才能设置它,比如:
XmlWriter writer = XmlWriter.Create(stringWriter, settings);
但我没有创造一个。我创建了我的类XmlObjectWithRefSerializer
,它派生自XmlObjectSerializer
,如下所示:
StreamWriter swWriter = File.CreateText(sFilename);
var serializer = new XmlObjectWithRefSerializer(tType);
serializer.WriteObject(swWriter.BaseStream, oData);
swWriter.Close();
在我的类中,它在我必须重写的方法中被用作XmlDictionaryWriter
,如:
public override void WriteObjectContent(XmlDictionaryWriter writer, object graph)
{
XmlWriterSettings settings = new XmlWriterSettings();
settings.OmitXmlDeclaration = true;
settings.Indent = true;
//writer.Settings = settings; --> Fails because read only
...
}
那么,有没有一种方法可以为我的派生类提供设置?
简而言之,我认为你做不到。
抽象XmlWriter
类的Settings
属性(类型为XmlWriterSettings
)被定义为虚拟的,因此可以在子类中重写,但这在您的场景中没有帮助。
您正在调用WriteObject
方法,传递要写入的流。接下来,在XmlObjectSerializer
类中,该方法将创建一个新的XmlDictionaryWriter
(它只是所提供流的包装器),然后将其传递给您覆盖的方法(WriteObjectContent
等人)。
似乎在任何时候都没有一个钩子可以用来用自己的编写器设置替换。