When implementing the ISerializable
interface in C#, we provide a constructor which takes a SerializationInfo
object, and then queries it with various
In addition to the enumerating solution, there is an internal method SerializationInfo.GetValueNoThrow()
according to the Reference Source.
You can e.g. make an extension method like this and avoid the exception overhead:
static class SerializationInfoExtensions
{
private static MethodInfo _GetValueNoThrow =
typeof(SerializationInfo).GetMethod("GetValueNoThrow",
BindingFlags.Instance | BindingFlags.NonPublic);
public static Object GetOptValue(this SerializationInfo info, String name, Type type)
{
return _GetValueNoThrow.Invoke(info, new object[] { name, type });
}
}