public Type ReadClass()
        {
            int type = ReadByte();

            if (type == BinaryObjectEncoder.OBJECT_TYPE_NULL)
            {
                return(null);
            }
            else if (type == BinaryObjectEncoder.OBJECT_TYPE_ARRAY)
            {
                Type componentClass = ReadClass();
                return(componentClass.MakeArrayType());
            }
            else if (type == BinaryObjectEncoder.OBJECT_TYPE_CLASS)
            {
                String           typeName = ReadString(true);
                ObjectTypeMapper mapper   =
                    ObjectSerializerRegistry.GetMapperBySerialType(typeName);
                if (mapper == null)
                {
                    throw new ConnectorException("No deserializer for type: " + typeName);
                }
                return(mapper.HandledObjectType);
            }
            else
            {
                throw new ConnectorException("Bad type value: " + type);
            }
        }
        public void WriteClass(Type clazz)
        {
            ObjectSerializationHandler handler =
                ObjectSerializerRegistry.GetHandlerByObjectType(clazz);
            ObjectTypeMapper mapper =
                ObjectSerializerRegistry.GetMapperByObjectType(clazz);

            if (handler == null && clazz.IsArray)
            {
                //we may have special handlers for certain types of arrays
                //if handler is null, treat like any other array
                WriteByte(BinaryObjectEncoder.OBJECT_TYPE_ARRAY);
                WriteClass(clazz.GetElementType());
            }
            else if (mapper == null)
            {
                throw new ConnectorException("No serializer for class: " + clazz);
            }
            else
            {
                String typeName = mapper.HandledSerialType;
                WriteByte(BinaryObjectEncoder.OBJECT_TYPE_CLASS);
                WriteString(typeName, true);
            }
        }
示例#3
0
 private Type DecodeClass(String type)
 {
     if (type.EndsWith("[]"))
     {
         String componentName  = type.Substring(0, type.Length - "[]".Length);
         Type   componentClass =
             DecodeClass(componentName);
         Type arrayClass =
             componentClass.MakeArrayType();
         return(arrayClass);
     }
     else
     {
         ObjectTypeMapper mapper =
             ObjectSerializerRegistry.GetMapperBySerialType(type);
         if (mapper == null)
         {
             throw new ConnectorException("No deserializer for type: " + type);
         }
         Type clazz = mapper.HandledObjectType;
         return(clazz);
     }
 }
示例#4
0
        private static String EncodeClass(Type clazz)
        {
            ObjectSerializationHandler handler =
                ObjectSerializerRegistry.GetHandlerByObjectType(clazz);
            ObjectTypeMapper mapper =
                ObjectSerializerRegistry.GetMapperByObjectType(clazz);

            if (handler == null && clazz.IsArray)
            {
                //we may have special handlers for certain types of arrays
                //if handler is null, treat like any other array
                return(EncodeClass(clazz.GetElementType()) + "[]");
            }
            else if (mapper == null)
            {
                throw new ConnectorException("No serializer for class: " + clazz);
            }
            else
            {
                String typeName = mapper.HandledSerialType;
                return(typeName);
            }
        }