public static bool GetPrimitives(Type containerType, Type type, out MethodInfo writer, out MethodInfo reader)
{
if (type.IsEnum)
type = Enum.GetUnderlyingType(type);
if (type.IsGenericType == false)
{
writer = containerType.GetMethod("WritePrimitive", BindingFlags.Static | BindingFlags.Public | BindingFlags.ExactBinding, null,
new Type[] { typeof(Stream), type }, null);
reader = containerType.GetMethod("ReadPrimitive", BindingFlags.Static | BindingFlags.Public | BindingFlags.ExactBinding, null,
new Type[] { typeof(Stream), type.MakeByRefType() }, null);
}
else
{
var genType = type.GetGenericTypeDefinition();
writer = GetGenWriter(containerType, genType);
reader = GetGenReader(containerType, genType);
}
if (writer == null && reader == null)
return false;
else if (writer != null && reader != null)
return true;
else
throw new InvalidOperationException(String.Format("Missing a {0}Primitive() for {1}",
reader == null ? "Read" : "Write", type.FullName));
}