0



私は.net3.5フレームワークでWCFサービスを開発し、basicHttpBidingを使用してIIS 5.1 WindowsXPSP3でそれらをホストしています。

.net2.0フレームワークで開発されたサービスを消費するクライアント。このために、WSDL.EXEを使用してプロキシクライアントを生成しました。このツールは問題なくプロキシクラスを生成しますが、すべてのプロパティに追加される問題により、追加のプロパティ"[property] Specificed"が追加されますが、問題なく機能します。任意のプロパティに値を割り当てる場合は、"specificed=true"を指定するだけで済みます。

この余分なプロパティを削除するために、 ServiceContract属性とともにXmlSerializerFormat属性を追加しました。WSDL.EXEは、追加のプロパティなしでクラスを生成します。ただし、以前に含まれていた一部のクラスは除外されます。

除外されたクラスを生成するために設定する必要のあるプロパティはありますか?

注:すべてのコントラクトクラスはDataContractに帰属し、プロパティはDataMemeberに帰属します。


nRk

4

2 に答える 2

3

XmlSerializerは、操作コントラクトに含まれていない子タイプを検出する代わりに、XmlIncludeAttributeを使用します。KnownTypeAttributeしたがって、それらを基本クラスに追加してみてください。

[XmlInclude(typeof(ChildClass1))]
[XmlInclude(typeof(ChildClass2))]
public class BaseClass {}
于 2009-11-11T08:26:30.733 に答える
1

標準のWCFDataContractSerializer[DataMember]は、.NETの可視性(パブリック/保護/プライベート/内部)に関係なく、-でマークされたすべてをシリアル化します。

XmlSerializerFormatに切り替えると、動作が変わります。これで、XmlSerializerは、public可視性があり、マークが付いていないすべてのものをシリアル化します[XmlIgnore]

一部のクラスとメンバーはマークされてpublicいないため、シリアル化されなくなったと思います。また、XmlSerializerでは、逆シリアル化で使用される明示的なパラメーターのないコンストラクターがクラスに必要です。すべてのクラスにそれがありますか?そしてもちろん、そのコンストラクターもである必要がありますpublic

于 2009-11-11T05:41:53.727 に答える