例えば下記のカスタムクラスを
[DataContract] public class Customer { [DataMember] public int Id { get; set; } [DataMember] public string Name { get; set; } }
下記のサービスコントラクトが定義されているサービスに引数として渡す。
[ServiceContract] public interface IMyService { [OperationContract] void Execute(object arg); }
するとシリアライズに失敗し、CommunicationException が発生する。これには、先ほどのサービスコントラクトを下記のように修正すれば対応できる。
[ServiceContract] public interface IMyService { [OperationContract] [ServiceKnownType(typeof(Customer))] // 属性で型を指定してやる void Execute(object arg); }
だけどこの方法の場合、引数に渡す可能性がある全てのデータコントラクトを属性で指定しなければいけないのか。