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

时间:2015-12-15 11:31:06

标签: c# xml-serialization

我正在扩展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
    ...
}

那么,有没有办法为我的派生类提供设置?

1 个答案:

答案 0 :(得分:2)

简而言之,我认为你不能。

抽象Settings类上的XmlWriterSettings属性(类型XmlWriter)被定义为虚拟,因此可以在子类中重写,但这在您的方案中无济于事。 / p>

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

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