サービスの object 型を引数に受け取るオペレーションにカスタムクラスのインスタンスを渡す

例えば下記のカスタムクラスを

[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);
}

だけどこの方法の場合、引数に渡す可能性がある全てのデータコントラクトを属性で指定しなければいけないのか。

社内フレームワークWCF 対応は簡単にはいかないなぁ。