2011-01-11 10 views
3

クライアントにListを送信するためのメソッド(GetUserSoftware)でWCFサービスを取得しました。WCFクライアント側List <>

私はこのように定義されているソフトウェア:

[DataContract] 
public class Software 
{ 
    public string SoftwareID { get; set; } 
    public string SoftwareName { get; set; } 
    public string DownloadPath { get; set; } 
    public int PackageID { get; set; } 

} 

方法はCLIENにすべてのソフトウェアavailebleを得るために、私のDBを経由し、クライアントに送り返すことのリストを生成しています。

問題はクライアント側ではリストが配列に変換されています。その配列内のすべての項目には私のソフトウェア属性が含まれていません。

私はサーバー側で自分の方法をデバッグしました。送信しようとしているリストが正しいことがわかりました。期待されるソフトウェアと属性がそれに含まれています。

これを回避する方法を知っている人がいますか?

答えて

4

あなたの物件には[DataMemeber]の属性が忘れていませんか?

4

タイプにDataContract属性を使用する場合は、サービスとクライアントの間でシリアル化して転送する各プロパティまたはフィールドにDataMember属性を使用する必要があります。コレクションはデフォルトで配列として作成されます。この動作が気に入らない場合は、[サービス参照の追加]ウィンドウ - > [詳細設定]でこの動作を変更して、使用するコレクションタイプを選択できます。

+0

+1、それは私の小さな問題を解決する! – elbaid

+0

+1、これも私の問題を解決しました。私は問題があったので、これに関するちょっとしたメモ。 Visual Studio 2010では、既にサービス参照を作成していて、再作成したくない場合は、サービス参照を右クリックし、「サービス参照の構成」をクリックして取得することができます。 – Jordan

1

まず第一に、あなたがシリアライズしたいプロパティの各[DataMemberを]属性が必要です。

[DataContract] 
public class Software 
{ 
    [DataMember] 
    public string SoftwareID { get; set; } 
    [DataMember] 
    public string SoftwareName { get; set; } 
    [DataMember] 
    public string DownloadPath { get; set; } 
    [DataMember] 
    public int PackageID { get; set; }  
} 

第二には、アレイへの変換は、クライアントではなくサーバーによって処理されるだろう。

0

サービスリファレンスを追加するときに、クライアントの配列の代わりにリストを作成することができます。「詳細設定」ボタンをクリックし、コレクションタイプを目的のタイプに変更します。

0

私は同じ問題を抱えていましたが、今解決しました!それはServiceKnownTypeの問題でした。既知の型ローダーがある場合は、ランタイム型を追加する必要があります。

Type aaa = Type.GetType("System.Collections.Generic.List`1[[ProjectName.BusinessObjects.Bank, ProjectName.BusinessObjects, Version=4.0.0.0, Culture=neutral, PublicKeyToken=null]]"); 

knownTypes.Add(aaa); 

誰でも同じ問題を抱えている人はこれを試すことができます。それは私の環境で働いています!

関連する問題