序列化自定义配置

问题描述 投票:0回答:1

我需要一些帮助来实现序列化自定义配置的方法。我从以下示例的内容开始:Polymorphic custom configuration section

读取配置可以正常工作,但是我无法保存对某些配置属性的修改(例如,将属性P1更改为包含另一个字符串)。在调试时,不同对象的内容看起来不错(该节包含一个集合,其中包含三个代理项,这些代理项本身包含Parent类的一个实例)。已更改的项目(P1 =“”)的isModified标志设置为true(按预期)。

调用config.Save()时出现一些奇怪的行为,经过三天的调查(甚至是Microsoft基类),我无法设法找出问题出在哪里。这是我的一些结论:

我为每个SerializeX方法(SerializeSection,SerializeElement和SerializeToXmlElement)添加了重写,并逐步调试了代​​码。

  • SerializeSection被调用(按预期),其参数parentElement为not我要序列化的部分,因为Collection属性为空(我希望它具有属于实例的三个实例)配置文件)。用this而不是parentElement调用base.SerializeSection解决了问题

  • SerializeToXmlElementSerializeElement之前被调用,并且确实包含XmlWriter的实例(与预期的一样)

  • SerializeElementSerializeToXmlElement之后被调用,并且not不再包含XmlWriter的实例

  • 当输入集合对象的序列化方法时,我希望集合的三个元素都被序列化。但是该集合只包含一个项目,而不是三个项目,而该项目是刚刚初始化的,因此具有一个[[Parent属性,返回null。

我知道需要有一个自定义的SerializeElement方法(适当地在Proxy类上),然后为反序列化每个元素调用

_ 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

我需要一些帮助来实现序列化自定义配置的方法。我从以下示例的内容开始:多态自定义配置部分阅读配置工作...

c# xml-serialization custom-configuration
1个回答
0
投票
最后这对我有用。也许它可以帮助遇到同样问题的其他人。我将发布完整的代码以使其保持简单。它可能不是一流的解决方案,但它正在起作用。如果有人可以看看并提出更好的方法,我将不胜感激。

帮助我使其正常运行的是这篇文章:https://www.codeproject.com/Articles/16466/Unraveling-the-Mysteries-of-NET-2-0-Configuration

© www.soinside.com 2019 - 2024. All rights reserved.