internal byte[] Serialize(object value) { if (value == Unset.Value) { if (_protocolVersion < 4) { throw new InvalidTypeException("Unset is not supported by this Cassandra version"); } //Return a buffer that represents the value Unset return(UnsetBuffer); } if (value == null) { return(null); } var type = value.GetType(); ITypeSerializer typeSerializer; if (_primitiveSerializers.TryGetValue(type, out typeSerializer)) { return(typeSerializer.Serialize(_protocolVersion, value)); } if (_customSerializers.Count > 0 && _customSerializers.TryGetValue(type, out typeSerializer)) { return(typeSerializer.Serialize(_protocolVersion, value)); } if (typeof(IEnumerable).GetTypeInfo().IsAssignableFrom(type)) { if (typeof(IDictionary).GetTypeInfo().IsAssignableFrom(type)) { return(_dictionarySerializer.Serialize(_protocolVersion, (IDictionary)value)); } return(_collectionSerializer.Serialize(_protocolVersion, (IEnumerable)value)); } if (typeof(IStructuralComparable).GetTypeInfo().IsAssignableFrom(type) && type.FullName.StartsWith("System.Tuple")) { return(_tupleSerializer.Serialize(_protocolVersion, (IStructuralEquatable)value)); } var buffer = _udtSerializer.Serialize(_protocolVersion, value); if (buffer != null) { return(buffer); } throw new InvalidTypeException("Unknown Cassandra target type for CLR type " + type.FullName); }
public byte[] Serialize(ProtocolVersion version, object value) { if (value == Unset.Value) { if (!version.SupportsUnset()) { throw new InvalidTypeException("Unset is not supported by this Cassandra version"); } //Return a buffer that represents the value Unset return(SerializerManager.UnsetBuffer); } if (value == null) { return(null); } var type = value.GetType(); if (_primitiveSerializers.TryGetValue(type, out ITypeSerializer typeSerializer)) { return(typeSerializer.Serialize((byte)version, value)); } if (_customSerializers.Count > 0 && _customSerializers.TryGetValue(type, out typeSerializer)) { return(typeSerializer.Serialize((byte)version, value)); } if (typeof(IEnumerable).GetTypeInfo().IsAssignableFrom(type)) { if (typeof(IDictionary).GetTypeInfo().IsAssignableFrom(type)) { return(_dictionarySerializer.Serialize((byte)version, (IDictionary)value)); } return(_collectionSerializer.Serialize((byte)version, (IEnumerable)value)); } if (Utils.IsTuple(type)) { return(_tupleSerializer.Serialize((byte)version, (IStructuralEquatable)value)); } var buffer = _udtSerializer.Serialize((byte)version, value); if (buffer != null) { return(buffer); } throw new InvalidTypeException("Unknown Cassandra target type for CLR type " + type.FullName); }