2010年9月16日木曜日

DataContractの初期化

WCFでDataContractとして定義したクラスのメンバを初期化したい、ってことはよくあるけど、以下のようにコンストラクタを追加してみたってどうにもなりません。

  1. [DataContract]  
  2.     public class Shop  
  3.     {  
  4.         [DataMember]  
  5.         public short ID { getset; }  
  6.         [DataMember]  
  7.         public string Name { getset; }  
  8.         [DataMember]  
  9.         public string Address { getset; }  
  10.         [DataMember]  
  11.         public string Phone { getset; }  
  12.         [DataMember]  
  13.         public string Fax { getset; }  
  14.         [DataMember]  
  15.         public List<Employee> Employee { getset; }  
  16.   
  17.         public Shop()  
  18.         {  
  19.             Employee = new List<Employee>();  
  20.         }  
  21.     }  

WCFでシリアライズされている型をいじるには、クライアント側でパーシャルクラスを定義すればよいだけ。

同じShopクラスならこんな具合。(WCFのコレクション型をObservableCollectionにシリアライズした場合)

  1. public partial class Shop : IEditableObject  
  2.     {  
  3.         public Shop  
  4.         {  
  5.             Employee = new ObservableCollection<Employee>();  
  6.         }  
  7.     }  

パーシャルクラスを使えば、IEditableObjectとかの実装もできるようになる。

0 件のコメント:

コメントを投稿