0

私のインターフェースでこのようなことができたらいいのにと思います

public T GetAStuff() where T is serializable

その結果、実装者がシリアライズ可能な出力を返すことを保証したい

これは達成できますか?ありがとう。

4

2 に答える 2

3

いいえ、そこには「シリアル化可能」の一般的な定義がないためです。これはシリアライザーに大きく依存し、要件の多くは属性ベースであり、一般的な制約として表現できません。

  • BinaryFormatter必要なだけ[Serializable]、またはおそらくISerializable
  • XmlSerializerpublicおよびパブリックのパラメーターなしのコンストラクターが必要です (これT : new()は役に立ちます)。オプションでIXmlSerializable(ただし、恐ろしいため、非常にまれです)
  • DataContractSerializerXmlSerializersetup または を使用できますが[DataContract]、パラメーターなしのパブリック コンストラクターは必要ありません
  • JSON.NET、protobuf-net などは、さまざまな属性またはランタイム構成で動作し、コンストラクターを使用する場合と使用しない場合があります

最善の策はT、実行時に必要な特定の詳細を確認するか、より簡単にすることです。ユニット/統合テストが必要なすべてのシナリオをカバーしていることを確認してください。

于 2013-01-07T21:24:27.500 に答える
1
public interface IFoo
{
    T GetAStuff<T>() where T : ISerializable; // or what ever you need to constrain T to
}

-また-

public interface IFoo<T> where T : ISerializable
{
    T GetAStuff();
}

さまざまなシリアル化オプションがあるため、タイプを制限できない場合があります。シリアル化オプションを 1 つだけ処理する必要がある場合は、可能かもしれません。

于 2013-01-07T21:22:42.133 に答える