序列化自定义配置
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了序列化自定义配置相关的知识,希望对你有一定的参考价值。
我需要一些帮助来实现序列化自定义配置的方法。我从以下示例的内容开始:Polymorphic custom configuration section
读取配置可以正常工作,但是我无法保存对某些配置属性的修改(例如,将属性P1更改为包含另一个字符串)。在调试时,不同对象的内容看起来不错(该节包含一个集合,其中包含三个代理项,这些代理项本身包含Parent类的一个实例)。已更改的项目(P1 =“”)的isModified标志设置为true(按预期)。
调用config.Save()时出现一些奇怪的行为,经过三天的调查(甚至是Microsoft基类),我无法设法找出问题出在哪里。这是我的一些结论:
我为每个SerializeX方法(SerializeSection,SerializeElement和SerializeToXmlElement)添加了重写,并逐步调试了代码。
SerializeSection被调用(按预期),其参数parentElement为not我要序列化的部分,因为Collection属性为空(我希望它具有属于实例的三个实例)配置文件)。用this而不是parentElement调用base.SerializeSection解决了问题
SerializeToXmlElement在SerializeElement之前被调用,并且确实包含XmlWriter的实例(与预期的一样)
SerializeElement在SerializeToXmlElement之后被调用,并且not不再包含XmlWriter的实例
当输入集合对象的序列化方法时,我希望集合的三个元素都被序列化。但是该集合只包含一个项目,而不是三个项目,而该项目是刚刚初始化的,因此具有一个[[Parent属性,返回null。
_ Parent.ProxySerializeElement(writer,serializeCollectionKey)] >>。但是我无法使其正常运行。由于XmlWriter实例始终为null,因此SerializeElement的重写无效(即使Proxy类具有某些IsModified方法来检查Parent对象是否已更改)。另外,一旦我输入此自定义SerializeElement方法,Parent对象也始终为null。这是我添加到示例中的代码片段:
Parent.cs
new public bool IsModified { get { return IsModified(); } }
public virtual bool ProxySerializeElement(XmlWriter writer, bool serializeCollectionKey)
{
return SerializeElement(writer, serializeCollectionKey);
}
] >>Proxy.cs
protected override bool IsModified()
{
bool isModified = base.IsModified();
return isModified || (Parent == null ? false : Parent.IsModified);
}
protected override bool SerializeElement(XmlWriter writer, bool serializeCollectionKey)
{
bool serialize = base.SerializeElement(writer, serializeCollectionKey);
return serialize || (_Parent == null ? false : _Parent.ProxySerializeElement(writer, serializeCollectionKey));
}
[让我发疯的是我无法正常工作。也许其他人可以帮助我。提前感谢!
问候,Stefi
我需要一些帮助来实现序列化自定义配置的方法。我从以下示例的内容开始:多态自定义配置部分阅读配置工作...
帮助我使其正常运行的是这篇文章:https://www.codeproject.com/Articles/16466/Unraveling-the-Mysteries-of-NET-2-0-Configuration
以上是关于序列化自定义配置的主要内容,如果未能解决你的问题,请参考以下文章