WCF学习笔记(四):转载MSDN,数据协定序列化程序支持的类型

Windows Communication Foundation (WCF) 使用 DataContractSerializer 作为其默认的序列化引擎以将数据转换到 XML 并将 XML 转换回数据。DataContractSerializer 是专为序列化数据协定类型而设计的。但是,它支持许多其他可视为具有隐式数据协定的类型。以下是可以序列化的类型的完整列表:

在部分信任模式中使用某些类型的限制

以下是在部分信任模式方案中使用某些类型时的限制列表:

  • 若要使用 DataContractSerializer 在部分受信任的代码中序列化或反序列化实现 ISerializable 的类型,则需要 SerializationFormatterUnmanagedCode 权限。
  • 部分信任模式中运行 WCF 代码时,不支持 readonly 字段(publicprivate)的序列化和反序列化。这是因为生成的 IL 无法验证,所以需要提升权限。
  • 在部分信任环境中支持 DataContractSerializerXmlSerializer。但是,使用 DataContractSerializer 时需要遵循以下条件:
    • 所有可序列化的 [DataContract] 类型必须为 Public。
    • [DataContract] 类型中的所有可序列化的 [DataMember] 字段或属性必须是公共字段或属性并且可以读取/写入。在部分受信任的应用程序中运行 WCF 时,不支持 readonly 字段的序列化和反序列化。
    • 在部分信任环境中不支持 [Serializable]/ISerializable] 编程模型。
    • 必须在代码或计算机级别配置 (Machine.config) 中指定已知类型。出于安全方面的原因,不能在应用程序级配置中指定已知类型。
  • 实现 IObjectReference 的类型会在部分受信任的环境中引发异常,原因是 GetRealObject 方法需要安全权限 [SecurityPermission(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.SerializationFormatter)]

有关序列化的其他说明

下面的规则也适用于数据协定序列化程序支持的类型:

  • 数据协定序列化程序完全支持泛型类型。
  • 数据协定序列化程序完全支持可以为 null 的类型。
  • 将接口类型视为 Object 或集合类型(对于集合接口)。
  • 支持结构和类。
  • DataContractSerializer 不支持 XmlSerializer 和 ASP.NET Web 服务使用的编程模型。具体而言,它不支持类似于 XmlElementAttributeXmlAttributeAttribute 的属性。若要启用对此编程模型的支持,必须切换 WCF 以使用 XmlSerializer 而非 DataContractSerializer
  • 以特殊方式处理 DBNull 类型。此类型是一个单一类型,在反序列化时,反序列化程序遵循单一约束并将所有 DBNull 引用指向单一实例。因为 DBNull 是可序列化的类型,所以它需要 SerializationFormatter 权限。
posted @ 2009-11-17 17:19  夕阳的儿子  阅读(426)  评论(1编辑  收藏  举报