0

ChannelFactoryの作成中にBindingを使用すると、シリアライズ/デシリアライズの仕組みに違いはありますか? (私はバインドがサービスのサーバー側のバインディングと一致する必要があることを知っています)WCF DataContractでXmlIncludeAttribueが使用されたときの影響

私は属性を私のDataContractの1つに使用していますが、動作しません。しかし、もし私がXmlIncludeAttributeを使うと、それは動作します! (私は、WCFに私のASMXサービスを移行しています..しかし、私はあまりにもクライアント側のプロキシを更新する自由を持っているので、私はどんなMessageContractsを使用しておりません。)

を[XmlInclude(typeof演算(男性))] [のDataContract]は パブリック抽象クラスPerson { [DataMember] public int Name {get;セット; }}

2)Iは、任意の属性(具体的に使用する場合 - WCF DataContractためXmlSerializerを使用XmlInclude))、WCFはXmlSerializer代わりにDataContractSerializerを使用していますか?

+1

質問がローカライズされているため、この質問を閉じることができます。バインディングの使用は、シリアライゼーション/デシリアライゼーションには影響しません。 XmlIncludeはXmlSerializerを使用し、KnownTypeはDataContractSerializerを使用します。したがって、2つを混在させる必要はありません。私はKnownTypeを正しく使用してプロブラムを削除する必要がありました。 – Learner

答えて

-1

DataContractSerializerは、XmlSerializerがサポートするすべてをサポートしますが、その逆は真ではありません。しかし、型が[DataContract]で装飾されている場合は、新しいDataContractプログラミングモデルに完全に切り替わり、それ以外の場合は[Serializable]、IXmlSerializableなどのサポートを完全に廃止します。

したがって、[XmlInclude]マジックは、ASMXと従来のXmlSerializerを使用している場合にのみ機能します。 DataContractSerializerを使用している場合は、既知の型を指定する必要があります。[XmlInclude]やXML属性などのXML-ismsはサポートされていません。ただし、必要に応じてDataContractSerializerの代わりにXmlSerializerを使用することはできますが、 XmlSerializerに[XmlSerializerFormatAttribute]で切り替えたいサービスや操作を飾るだけです。

これは役に立ちます。

関連する問題