我有以下的xml表示2種類型的插件,FilePlugin和RegsitryPlugin的:如何將xml反序列化爲繼承對象?
<Client>
<Plugin Type="FilePlugin">
<Message>i am a file plugin</Message>
<Path>c:\</Path>
</Plugin>
<Plugin Type="RegsitryPlugin">
<Message>i am a registry plugin</Message>
<Key>HKLM\Software\Microsoft</Key>
<Name>Version</Name>
<Value>3.5</Value>
</Plugin>
</Client>
我想的XML反序列化爲對象。 正如你所看到的,「消息」元素正在重演既爲FilePlugin和RegistryPlugin和我使用的繼承這樣的:
abstract class Plugin
{
private string _message;
protected Plugin(MISSING conf)
{
// here i need to set my private members like:
// Message = MISSING.Message;
}
}
class FilePlugin : Plugin
{
private string _path;
public FilePlugin(MISSING config)
: base(config)
{
// Here i need to set my private members like:
// _path = config.Path;
}
}
class RegistryPlugin : Plugin
{
private string _key;
private string _name;
private string _value;
public RegistryPlugin(MISSING config)
: base(config)
{
// Here i need to set my private members like:
// _key = config.Key;
// _key = config.Name;
// _key = config.Value;
}
}
}
我需要以某種方式反序列化的XML,比按照決定PluginType元素哪個實例創建: 即: 如果是寫在XML類型= FilePlugin比我更需要創造
Plugin p1 = new FilePlugin(conf);
如果是寫在XML類型= RegistryPlugin比我更需要創造
Plugin p2 = new RegistryPlugin(conf);
請按照我的意見,在我的代碼,以瞭解缺少的部分。 謝謝
非常好的答案! – user829174 2012-02-18 15:33:06
我有一個關於你的答案的問題,如果我想添加另一個元素到名爲真正的 的xml。 Allow屬性可以獲得'True'或'False'的值。我希望後者將其轉換爲Plugin類中的布爾屬性,這意味着該插件將具有:'public bool Allow {get;組; }」。有沒有可能轉換它? –
user829174
2012-02-18 15:55:48