WCF - 序列化继承类型

2024-01-03

我有这些课程:

[DataContract]
public class ErrorBase {}

[DataContract]
public class FileMissingError: ErrorBase {}

[DataContract]
public class ResponseFileInquiry
{
  [DataMember]
  public List<ErrorBase> errors {get;set;};
}

ResponseFileInquiry 类的实例是我的服务方法返回给客户端的内容。现在,如果我用 ErrorBase 的实例填充 ResponseFileInquiry.errors,一切正常,但如果我添加继承类型 FileMissingError 的实例,我会在序列化期间收到服务端异常:

Type 'MyNamespace.FileMissingError' with data contract name 'FileMissingError' 
is not expected. Add any types not known statically to the list of known types - 
for example, by using the KnownTypeAttribute attribute or by adding them to the 
list of known types passed to DataContractSerializer.'

因此,序列化程序变得很困惑,因为它期望 List 包含声明的类型对象 (ErrorBase),但它正在获取继承的类型 (FileMissingError) 对象。

我有一大堆错误类型,列表将包含它们的组合,那么我该怎么做才能使它工作呢?


您应该将 KnownType 属性添加到您的基类中

[DataContract]
[KnownType(typeof(FileMissingError))]
public class ErrorBase {}

阅读有关 KnownType 属性的更多信息blog http://blogs.msdn.com/sowmy/archive/2006/06/06/all-about-knowntypes.aspx

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WCF - 序列化继承类型 的相关文章

随机推荐

  • C 和 C++ 中枚举的用途是什么

    枚举是常量整数值的列表 可以使用它来代替使用 define 定义常量值 但除此之外 我还没有在 C 和 CPP 中发现枚举的任何实质性用途 任何人都可以让我知道枚举的确切用途是什么 最初我想如果我们创建一个枚举变量并分配一个不在枚举值中的值
  • 将对象转换为 JAXBElement

    我想实现一个返回 JAXBElement 的方法 下面是代码 XmlRootElement name history XmlAccessorType XmlAccessType FIELD public class IBHistoryInf
  • 从表单中的所有选择元素中获取所有选定的选项元素

    大家好 感谢您抽出时间回答我的问题 我有一个包含 6 个选择元素的表单 其类别为 skillLevel 我需要使用 jQuery 获取 最好是在数组中 每个选择元素的值 我怎样才能做到这一点 您可以使用map method var arr
  • HTML 钻取表:设计

    我试图找出根据标签构建 HTML 钻取表的最佳方法 它必须简单 但最重要的是它应该符合逻辑 关于如何做到这一点是否有任何首选标准 你会推荐什么 一种可能的解决方案是 colspan tbody tr td td td Summery row
  • 更改 PHP.ini 位置文件?

    我在 OSX 上使用 apache2 默认情况下php ini位置是 private etc php ini 我需要把它改成这样 Library FileMaker Server Web Publishing publishing engi
  • Delphi 2010-IDE 不断停止在 CPU 调试窗口

    我在 D2010 IDE 中不断出现 CPU 调试窗口 我注意到这出现在一些断点上 而其他一些断点则不会导致这种效果 无法解释这种情况到底何时发生或哪些断点导致这种情况 但似乎当调试器无法到达代码上的断点时 它会停止在方法的开始地址上 并且
  • 在 jar 中包含属性/配置文件是一种不好的做法吗?

    例如 MyApp 是一个 Web 应用程序 其中包含一个属性文件 server properties 该文件描述应用程序的配置数据 例如服务器名称 在开发阶段 server properties 位于其自己的 IDE 项目文件夹中 它的逻辑
  • 当终端关闭时终止 sudo python 脚本

    如何判断运行 python 脚本的终端是否已关闭 如果用户关闭终端 我想安全地结束我的 python 脚本 我可以使用处理程序捕获 SIGHUP 但当脚本作为 sudo 运行时则不行 当我使用 sudo 启动脚本并关闭终端时 python
  • 模拟内存不足警告不起作用

    我有一个UIWebView in a UIViewController 我正在尝试将此视图控制器推送到现有的UINavigationController 它有另一个视图控制器 它也有一个UIWebView在里面 推动第一个视图控制器后 我尝
  • 单击时切换 CSS3 动画

    在没有 JavaScript 的情况下 在点击时改变 CSS3 动画方向的最佳方法是什么 我最近一直在探索复选框黑客 并试图找到一种方法 只使用一组关键帧 而不是两组 一个前进 一个返回 这可能吗 或者有没有办法用一套来做到这一点 例如我有
  • 如何删除mysql数据库中的重复记录?

    使用rails或mysql查询删除mysql数据库中重复记录的最佳方法是什么 您可以通过以下方式将不同的记录复制到新表中 select distinct into NewTable from MyTable
  • 如何使用 Gradle 运行多个命名测试?

    我知道怎么说 gradle test tests mypackage MyTest 但如何指定多个呢 gradle test tests mypackage MyTest mypackage model ModelTest BasicTes
  • 了解 Qt 中的表单布局机制

    Qt具有灵活且强大的布局机制来处理桌面应用程序窗口的视图 但它是如此灵活 以至于当出现问题并需要微调时 它几乎无法被理解 而且如此强大 以至于它可以击败任何试图压倒 Qt 关于表单外观的观点的人 那么 谁能解释一下 或者提供一下Qt的定位机
  • PDO 因记录过多、缓冲查询而失败

    这个脚本昨天运行良好 但是今天 由于我最初选择的表中现在有大约 150 000 条记录 所以它失败了 说我正在从 null 获取 据我所知 这是因为我的记录太多了 因此 我最终通过向初始查询 1000 添加限制和这一行来纠正它 MysqlC
  • Bash 中的文件名未正确打印,带有下划线“_”[重复]

    这个问题在这里已经有答案了 我正在用这个 DATE FOLDER date b d a G FILENAME HOME date1 tar gz echo BACKUP DESTINATION DATE FOLDER FOLDERNAME
  • Python 继承:何时以及为何使用 __init__

    我是一个Python新手 试图理解继承方法背后的哲学 逻辑 问题最终涉及为什么以及何时必须使用 init 子类中的方法 例子 看来从超类继承的子类不需要有自己的构造函数 init 方法 下面 狗继承了哺乳动物的属性 名字 年龄 和方法 发出
  • 产品密钥的正则表达式

    我正在尝试做一个正则表达式来显示所有具有该值的产品密钥 这是我创建的正则表达式 A Z0 9 5 A Z0 9 5 A Z0 9 5 A Z0 9 5 A Z0 9 5 由于某种原因它不起作用 您打算使用哪种正则表达式工具 grep egr
  • 无法登录活动管理。有什么办法可以创建管理员用户吗? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 当我尝试使用默认管理员用户登录时 我收到 无效的电子邮件或密码 有没有办法用代码创建用户并尝试以这种方式登录 我可以登录我的实时网站 但不
  • 像 Perl 一样在 JavaScript 正则表达式中嵌入注释

    有没有办法在 JavaScript 正则表达式中嵌入注释 例如你可以用 Perl 做 https stackoverflow com questions 632795 how do you comment a perl regular ex
  • WCF - 序列化继承类型

    我有这些课程 DataContract public class ErrorBase DataContract public class FileMissingError ErrorBase DataContract public clas