如何在派生自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
    ...
}

那么,有没有一种方法可以为我的派生类提供设置?

如何在派生自XmlObjectSerializer的类中设置XmlWriterSettings的缩进

简而言之,我认为你做不到。

抽象XmlWriter类的Settings属性(类型为XmlWriterSettings)被定义为虚拟的,因此可以在子类中重写,但这在您的场景中没有帮助。

您正在调用WriteObject方法,传递要写入的流。接下来,在XmlObjectSerializer类中,该方法将创建一个新的XmlDictionaryWriter(它只是所提供流的包装器),然后将其传递给您覆盖的方法(WriteObjectContent等人)。

似乎在任何时候都没有一个钩子可以用来用自己的编写器设置替换。

相关文章:
  • 没有找到相关文章