SerializableType CompileNonContractTypes(Type type) { // built-in type Encode encoder; Decode decoder; if (Encoder.TryGetCodec(type, out encoder, out decoder)) { return(SerializableType.CreatePrimitiveType(type, encoder, decoder)); } if (type == typeof(object)) { return(SerializableType.CreateObjectType(type)); } if (typeof(Described).IsAssignableFrom(type)) { return(SerializableType.CreateObjectType(type)); } if (typeof(IAmqpSerializable).IsAssignableFrom(type)) { return(SerializableType.CreateAmqpSerializableType(this, type)); } if (type.IsGenericType() && type.GetGenericTypeDefinition() == typeof(Nullable <>)) { Type[] argTypes = type.GetGenericArguments(); Fx.Assert(argTypes.Length == 1, "Nullable type must have one argument"); Type argType = argTypes[0]; if (argType.IsEnum()) { return(CompileEnumType(argType)); } else { return(SerializableType.CreateObjectType(type)); } } if (type.IsEnum()) { return(CompileEnumType(type)); } SerializableType collection = this.CompileCollectionTypes(type); if (collection != null) { return(collection); } return(null); }
SerializableType CompileNonContractTypes(Type type) { // built-in type Encode encoder; Decode decoder; if (Encoder.TryGetCodec(type, out encoder, out decoder)) { return(SerializableType.CreatePrimitiveType(type, encoder, decoder)); } if (type == typeof(object)) { return(SerializableType.CreateObjectType(type)); } if (typeof(IAmqpSerializable).IsAssignableFrom(type)) { return(SerializableType.CreateAmqpSerializableType(this, type)); } if (typeof(Described).IsAssignableFrom(type)) { return(SerializableType.CreateAmqpDescribedType(this, type)); } SerializableType nullable = this.CompileNullableTypes(type); if (nullable != null) { return(nullable); } SerializableType collection = this.CompileCollectionTypes(type); if (collection != null) { return(collection); } return(null); }