public FieldDeserializeMethod <T> GetFieldDeserializeDelegate <T>()
 {
     if (typeof(T).IsValueType)
     {
         var method = ValueTypeDeserializeMethods.GetMethodForType(typeof(T));
         Debug.Assert(method != null);
         return((FieldDeserializeMethod <T>)CreateDelegate(typeof(FieldDeserializeMethod <T>), method));
     }
     else
     {
         var method = ReferenceFieldDeserializeMethods.GetMethodForType(typeof(T));
         Debug.Assert(method != null);
         return((FieldDeserializeMethod <T>)CreateDelegate(typeof(FieldDeserializeMethod <T>), method));
     }
 }
 public bool HasFieldSerializer(Type type)
 {
     if (type.IsValueType)
     {
         var hasSerializeMethod = ValueTypeSerializeMethods.GetMethodForType(type) != null;
         Debug.Assert(hasSerializeMethod ==
                      (ValueTypeDeserializeMethods.GetMethodForType(type) !=
                       null));                 // <- debug check for matching deserializer
         return(hasSerializeMethod);
     }
     else
     {
         var hasSerializeMethod = ReferenceFieldSerializeMethods.GetMethodForType(type) != null;
         Debug.Assert(hasSerializeMethod ==
                      (ReferenceFieldDeserializeMethods.GetMethodForType(type) !=
                       null));                 // <- debug check for matching deserializer
         return(hasSerializeMethod);
     }
 }