我正在扩展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
...
}
那么,有没有办法为我的派生类提供设置?
答案 0 :(得分:2)
简而言之,我认为你不能。
抽象Settings
类上的XmlWriterSettings
属性(类型XmlWriter
)被定义为虚拟,因此可以在子类中重写,但这在您的方案中无济于事。 / p>
您正在调用WriteObject
方法,将流传递给写入。接下来会发生的是,在XmlObjectSerializer
类中,该方法将创建一个新的XmlDictionaryWriter
(它只是提供的流的包装器),然后将其传递给您覆盖的方法({{ 1}}等人。
似乎没有任何一个钩子可以用来替换你自己的编写器设置。