【问题标题】:Deserializing derived Types反序列化派生类型
【发布时间】:2014-01-30 20:42:36
【问题描述】:

我有一个继承自基类的类层次结构。我想从 XML 反序列化所有类型。文档说为此目的使用此构造函数:

XmlSerializer(Type type, Type[] extraTypes);

所以我做了这样的事情:

public class SomeBase { public string SomeProperty { get; set } }
public class SomeChild : SomeBase { public string SomeOtherProperty { get; set; } }

然后我创建 XmlSerializer 并尝试反序列化我的 XML:

XmlSerializer serializer = new XmlSerializer(typeof(SomeBase),
   new Type[] { typeof(SomeChild) });
SomeBase deserialized = (SomeBase)serializer.Deserialize(new StringReader(myXml));

我得到 InvalidOperationException 说:

"<SomeChild xmlns=''> was not expected."

我该如何解决这个问题?

更新 这是我的 XML:

// Works fine:
<?xml version=\"1.0\" encoding=\"UTF-8\" ?>
<SomeBase>
   <SomeProperty>some value</SomeProperty>
</SomeBase>
// InvalidOperationException:
<?xml version=\"1.0\" encoding=\"UTF-8\" ?>
<SomeChild>
   <SomeProperty>some value</SomeProperty>
   <SomeOtherProperty>some other value</SomeOtherProperty>
</SomeChild>

【问题讨论】:

  • 你的 xml 文件是什么样的?

标签: c# xml


【解决方案1】:

您应该指出 SomeBase 也可以是 SomeChild 的序列化程序。 您可以使用 XmlInclude 属性来做到这一点

[XmlInclude(typeof(SomeChild))]
public class SomeBase { public string SomeProperty { get; set } }
public class SomeChild : SomeBase { public string SomeOtherProperty { get; set; } }

【讨论】:

  • 还是一样的异常
猜你喜欢
  • 2017-03-22
  • 1970-01-01
  • 2012-05-25
  • 2017-09-03
  • 1970-01-01
  • 2013-07-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多