基本的な数値型のそれぞれについて型チェックを行うだけです。
これは仕事をする必要がある拡張メソッドです:
public static bool IsNumber(this object value)
{
return value is sbyte
|| value is byte
|| value is short
|| value is ushort
|| value is int
|| value is uint
|| value is long
|| value is ulong
|| value is float
|| value is double
|| value is decimal;
}
これはすべての数値タイプをカバーする必要があります。
更新
逆シリアル化中に文字列の数値を実際に解析する必要があるようです。この場合、おそらくを使用するのが最善double.TryParseです。
string value = "123.3";
double num;
if (!double.TryParse(value, out num))
throw new InvalidOperationException("Value is not a number.");
もちろん、これは非常に大きな整数/長い小数を扱えないだろうが、その場合はあなただけへの追加の呼び出しを追加する必要がありますlong.TryParse/ decimal.TryParse他/何でも。