私は protobuf-net ライブラリを使用して wcf シリアライゼーションを高速化していますが、派生クラスで問題が発生しました。クラスの派生についていくつかの議論を調べましたが、私の問題に合うものはありません。
以下のベースを使用しています。
[DataContract, ProtoContract]
//[ProtoInclude(10000, typeof(SysLoginRequest))]
public class ServiceRequest
{
public ServiceRequest()
{
// No parameterless constructor found for ServiceRequest?
RuntimeTypeModel.Default.Add(typeof(ServiceRequest), true).AddSubType(10000, typeof (SysLoginRequest));
}
}
そして派生クラス:
[DataContract, ProtoContract]
public class SysLoginRequest : ServiceRequest, IServiceRequest<SysLoginResponse>
{
[DataMember(Order = 1, IsRequired = true)]
public string UserSid { get; set; }
[DataMember(Order = 2, IsRequired = true)]
public string UserName { get; set; }
[DataMember(Order = 3, IsRequired = true)]
public string Password { get; set; }
[DataMember(Order = 4, IsRequired = true)]
public string IpAddress { get; set; }
[DataMember(Order = 5)]
public string ProcessName { get; set; }
[DataMember(Order = 6)]
public int ProcessId { get; set; }
}
私がやろうとしているのは、実行時にサブクラスを追加して属性から逃れることですが、私のテストでは、基本クラスにパラメーターのないコンストラクターがないという実行時エラーが常に発生しますか? コンストラクターを静的にしようとしましたが、それも役に立ちませんでした。
属性を使用する (そしてコンストラクターを削除する) 場合はすべて問題ありませんが、RuntimeTypeModel を使用するとエラー メッセージが表示されます。ここで何が間違っていますか?