关于XML序列化的另一个问题。我有一个Base
课程,我从中继承了Derived1
和Derived2
个类。我想从xml元素<base>
反序列化它们,我想创建Derived1
实例<base attr="1">
或Derived2
实例if <base attr="2">
。我该怎么做?请注意,我使用XmlSerializes
和XmlAttributeOverrides
。谢谢
答案 0 :(得分:0)
编辑:我完全修改了我的答案,以适应您的具体情况。假设您已经正确地序列化了基本列表,则下面的代码应该可以正常工作。
我通常不建议使用switch语句,因为它违反了OCP。多态性通常是一个更好的答案。但是对于快速而肮脏的解决方案,以及具有相对较少值(例如您的情况)的switch语句,这将起作用。
重要说明:假设事物序列化正确,XML序列化程序已经反序列化为正确的派生类。但是如果由于某种原因在你的情况下并非如此,那么你需要其余的代码(foreach with switch statement)。
private static void ImportDerivedClasses()
{
List<Base> bases;
string filePathAndName = @"c:\temp\SerializedBases.xml";
using (FileStream fileStream = new FileStream(filePathAndName, FileMode.Open))
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(List<Base>));
bases = xmlSerializer.Deserialize(fileStream) as List<Base>;
}
// The rest of this is unnecessary if we originally serialized correctly.
List<Base> deserializedBases = new List<Base>();
foreach(Base baseClass in bases)
{
switch (baseClass.Attr)
{
case "1":
deserializedBases.Add(new Derived1());
break;
case "2":
deserializedBases.Add(new Derived2());
break;
default:
// Log warning
break;
}
}
}