次のように、あるタイプの入力オブジェクトをスーパータイプとしてシリアル化するための次のジェネリックメソッドがあります。
public string SerialiseAs<TResult, TInput>(TInput input) where TInput : TResult
{
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(TResult));
MemoryStream stream = new MemoryStream();
ser.WriteObject(stream, input);
stream.Position = 0;
StreamReader reader = new StreamReader(stream);
return reader.ReadToEnd();
}
次のように両方のジェネリック型を指定してこのメソッドを呼び出す必要があります。
MySubType x = new MySubType();
string json = SerialiseAs<MySuperType, MySubType>(x);
私の質問は、なぜTInput
この状況で推測できないのですか?TResult
実際にリターンタイプとして使用されていないからですか?次のコードはよりクリーンですが、入力タイプがないためにコンパイルされません。
MySubType x = new MySubType();
string json = SerialiseAs<MySuperType>(x);