繁体   English   中英

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

[英]How to set the indent of XmlWriterSettings in a class, derived from XmlObjectSerializer?

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

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

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

Settings属性(类型XmlWriterSettings )于抽象XmlWriter类被定义为虚拟的,所以可以覆盖在子类中,但是这不会在您的方案帮助。

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

似乎根本没有一个钩子可用于用您自己的编写器设置替换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM