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); } }
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); } }
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); } }