MS.NET MVC の ValueProvider 機能を使用して、json API のすべてのシリアル化ロジックをカプセル化することを望んでいました。
ただし、私の逆シリアル化は型指示されているため (つまり、逆シリアル化から返されるクラスを知る必要があるため)、ValueProvider が返すはずの型に到達する合理的な方法を単純に見つけることができません。
コントローラーがあるとします。
public class MyController : Controller
{
// We want obj to be instantiated by MyValueProvider
public ActionResult MyAction(MyComplexObject obj)
{
}
}
私が次に書けるようにしたいこと:
public class MyValueProvider : IValueProvider
{
public bool ContainsPrefix(string prefix)
{
...
}
public ValueProviderResult GetValue(string key)
{
switch (req.HttpMethod)
{
case "POST":
{
req.InputStream.Position = 0;
T retObj = MyDeserialize<T>(req.InputStream);
return new ValueProviderResult(retObj, key, CultureInfo.CurrentCulture);
}
break;
default:
return null;
}
}
}
(実際に T を MyValueProvider にバインドしないと、リフレクションを使用してランタイム提供の Type で MyDeserialize を呼び出す必要があることは認識しています)
GetValue への「キー」引数によってキー付けされた変数命名スキームを使用して、ランタイム型を派生させて逆シリアル化することをほとんど検討しています。