![](/img/trans.png)
[英]How to set XmlWriter.XmlWriterSettings when created from XPathNavigator.AppendChild()?
[英]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.