3

いくつかのデータ契約を結んでいるWCFサービスがあります。私はWebサービスソフトウェアファクトリーを使用しています。このファクトリーは、デザイナーを使用してすべてのメッセージとデータ、およびその他のコントラクトを作成し、それらを部分的なクラスとして作成します。コードが再生成されると、クラスが再作成されます。

using WcfSerialization = global::System.Runtime.Serialization;

[WcfSerialization::CollectionDataContract(Namespace = "urn:CAEService.DataContracts", ItemName = "SecurityItemCollection")]
public partial class SecurityItemCollection : System.Collections.Generic.List<SecurityItem>
{
}

データコントラクトは、正常に機能していたカスタムクラスの一般的なリストです。ただし、このクラスにプロパティを追加したいので、同じ名前空間にこの部分クラスを追加しました。

public partial class SecurityItemCollection
{
    public int TotalRecords { get; set; }
}

これはサービス側では正常に機能しているようですが、クライアントからサービス参照をコンパイルして更新すると、クラスに新しいプロパティがありません。つまり、クラスをシリアル化してクライアント側で再作成すると、新しいプロパティが失われます。財産。なぜこれなのか誰もが知っていますか?

TIA

編集:わかりました、これは公式に私を狂わせています。私が見ることができる唯一のことは、DataContractの代わりにCollectionDataContract属性を使用しているということです。これはどういうわけかクラスのデータメンバーをシリアル化することを許可しませんか?なぜそうなるのでしょうか?サービス側では正常に機能しています。値を確認して入力しても問題ありません。ただし、クライアントでサービス参照を更新しても、データメンバーのないコレクションクラスだけで何もありません。

4

3 に答える 3

3

TotalRecordsプロパティにDataMember属性を追加してみてください

于 2010-12-08T16:51:55.127 に答える
3

多くの検索を行った結果、これは許可されていないことがわかりました。つまり、CollectionDataContractとしてマークされたクラスはデータメンバーを持つことができません。なぜこれなのか私にはわかりませんが、数時間かかり、大きな頭痛の種になりました。以下のリンクを参照してください。

WCFCollectionDataContractおよびDataMember

于 2010-12-10T12:12:30.557 に答える
2

私はこれが古いことを知っていますが、私がこの主題を検索したとき、それは出続けました。プロパティに「DataMemberAttribute」属性を追加することで、これを機能させることができました。以下はコード例です。

public partial class SecurityItemCollection
{
    [global::System.Runtime.Serialization.DataMemberAttribute()]
    public int TotalRecords { get; set; }

}
于 2011-08-21T03:38:02.887 に答える