我正在使用SavableModelBase
来向/从XML保存/加载配置文件。
我现在有一个案例,我有一些常见的属性,我想重构一个基类。
类似的东西:
class CommonConfig: SavableModelBase<CommonConfig>
{
/// <summary>
/// Gets or sets the property value.
/// </summary>
public string CommonPath
{
get { return GetValue<string>(CommonPathProperty); }
set { SetValue(CommonPathProperty, value); }
}
/// <summary>
/// Register the Name property so it is known in the class.
/// </summary>
public static readonly PropertyData CommonPathProperty = RegisterProperty("CommonPath", typeof(string), string.Empty);
}
然后我想创建一些与公共配置共享属性的特定配置(例如SpecificConfig
)。如果我继承CommonConfig
Save()
函数,则问题是SpecificConfig
无法识别{。}}的属性。
我想我可以使用合成(SpecificConfig
将具有类型为CommonConfig
的属性),但这看起来/读取效果不佳。
有什么建议吗?
答案 0 :(得分:0)
序列化引擎使用GetType()来获取实际类型。所以你可以使用接口/基类/你想要实际调用Save()方法的任何东西。最后,它将获取实际实时实例类型的属性(因此继承)并保存属于该对象的所有属性,包括基类属性。
换句话说,这应该可以正常工作。
答案 1 :(得分:0)
在上面的场景中使用:
SpecificConfig.Load(myFile, SerializationMode.Xml);
应该返回CommonConfig
。可能它返回null,因为文件中的类实际上是SpecificConfig
。
如果我正在使用:
SpecificConfig.Load<SpecificConfig>(myFile, SerializationMode.Xml);
它按预期工作。