首页 文章

XmlIncludeAttribue在WCF DataContract中使用时的效果

提问于
浏览
0

1)创建ChannelFactoryBinding 是否会对序列化/反序列化的工作方式产生影响? (我知道使用的绑定应该与服务的服务器端绑定匹配 . )

我在我的一个 DataContract 中使用KnownType属性,但它不起作用 . 但如果我使用XmlIncludeAttribute,它就可以了! (我正在将我的ASMX服务迁移到WCF ..但我没有使用任何MessageContracts,因为我也可以自由更新客户端代理 . )

[XmlInclude(typeof(Males))] [DataContract] public abstract class Person {[DataMember] public int Name {get;组; }}

2)如果我使用 XmlSerializer 作为WCF DataContract 的任何属性(具体 - XmlInclude)),WCF是否使用 XmlSerializer 而不是 DataContractSerializer

1 回答

  • -1

    DataContractSerializer支持XmlSerializer支持的所有内容,但反之则不然 . 但是如果一个类型用[DataContract]修饰,它会完全切换到新的DataContract编程模型,完全抛弃对[Serializable],IXmlSerializable等类型的支持 .

    因此,只有当您使用ASMX和传统的XmlSerializer时,您的[XmlInclude]魔法才有效 . 如果您正在使用DataContractSerializer,则必须执行已知类型,并且不支持XML-isms,如[XmlInclude]和XML属性 . 但是,如果你愿意,你仍然可以使用XmlSerializer而不是DataContractSerializer;您需要做的就是使用[XmlSerializerFormatAttribute]装饰要切换到XmlSerializer的服务或操作 .

    希望这可以帮助!

相关问题