WCFでDataContractとして定義したクラスのメンバを初期化したい、ってことはよくあるけど、以下のようにコンストラクタを追加してみたってどうにもなりません。
- [DataContract]
- public class Shop
- {
- [DataMember]
- public short ID { get; set; }
- [DataMember]
- public string Name { get; set; }
- [DataMember]
- public string Address { get; set; }
- [DataMember]
- public string Phone { get; set; }
- [DataMember]
- public string Fax { get; set; }
- [DataMember]
- public List<Employee> Employee { get; set; }
-
- public Shop()
- {
- Employee = new List<Employee>();
- }
- }
[DataContract]
public class Shop
{
[DataMember]
public short ID { get; set; }
[DataMember]
public string Name { get; set; }
[DataMember]
public string Address { get; set; }
[DataMember]
public string Phone { get; set; }
[DataMember]
public string Fax { get; set; }
[DataMember]
public List<Employee> Employee { get; set; }
public Shop()
{
Employee = new List<Employee>();
}
}
WCFでシリアライズされている型をいじるには、クライアント側でパーシャルクラスを定義すればよいだけ。
同じShopクラスならこんな具合。(WCFのコレクション型をObservableCollectionにシリアライズした場合)
- public partial class Shop : IEditableObject
- {
- public Shop
- {
- Employee = new ObservableCollection<Employee>();
- }
- }
public partial class Shop : IEditableObject
{
public Shop
{
Employee = new ObservableCollection<Employee>();
}
}
パーシャルクラスを使えば、IEditableObjectとかの実装もできるようになる。