0

WCF の DataContract 属性は必須ですか?

クラスが DataContract でマークされていないか、DataMember でプロパティがマークされていないクラスがあります。

4 サーバーに wcf サービスをデプロイすると、アウト 4 サービスは 3 サーバーで正常に動作し、1 サーバーで失敗し、「タイプ 'クラス' をシリアル化できません。DataContractAttribute 属性でマークし、シリアル化するすべてのメンバーをマークすることを検討してください。 DataMemberAttribute 属性を使用します。"

コードでシリアライザーを使用するように指示できる web.config または machine.config または IIS の設定はありますか? また

属性が指定されていない場合、デフォルトのシリアライザーを使用するように指定できますか?

ありがとう、クリシュナ

4

3 に答える 3

6

いいえ、DataContractAttribute は必要ありません。WCF はシリアル化規則を推測します。私が確認できる唯一のことは、.NET のバージョンがすべてのサーバーで同じであることです。

詳細: WCF データ コントラクト/シリアル化

于 2012-06-29T15:36:29.533 に答える
1

はい、[DataContract]WCFサービスとすべてのクライアント間で送信されるすべてのクラスの属性が必要になります。

送信するデータを含む可能性のあるそのクラスのすべてのプロパティは、属性でマークする必要があり[DataMember]ます。これにより、シリアル化可能なデータとシリアル化不可能なデータの両方を含むクラスを定義できますが、お勧めしません。

publicフィールドやプロパティなどのデータメンバーのみをシリアル化できますが、メソッドはシリアル化できないことに注意してください。したがって、データコントラクトとしてサービスとクライアント間で通信されるデータを含むだけのプレーンクラスを使用することをお勧めします。

于 2012-06-29T11:18:49.570 に答える
1

MSDNが述べたように

[the DataContractAttribute] 型がデータ コントラクトを定義または実装し、DataContractSerializer などのシリアライザーによってシリアル化可能であることを指定します。型をシリアライズ可能にするには、型の作成者が型のデータ コントラクトを定義する必要があります。

DataContractWCF サービスで使用されるおよびDataMember属性でクラスを装飾する必要があります。

于 2012-06-29T10:31:13.620 に答える