private bool TryGetSerializerFor(out IGraphSONSerializer serializer, Type type) { if (Serializers.ContainsKey(type)) { serializer = Serializers[type]; return(true); } foreach (var supportedType in Serializers.Keys) { if (supportedType.IsAssignableFrom(type)) { serializer = Serializers[supportedType]; return(true); } } serializer = null; return(false); }
/// <summary> /// Transforms an object into its GraphSON representation including type information. /// </summary> /// <param name="objectData">The object to transform.</param> /// <returns>A GraphSON representation of the object ready to be serialized.</returns> public virtual dynamic ToDict(dynamic objectData) { var type = objectData.GetType(); IGraphSONSerializer serializer = TryGetSerializerFor(type); if (serializer != null) { return(serializer.Dictify(objectData, this)); } if (IsDictionaryType(type)) { return(DictToGraphSONDict(objectData)); } if (IsCollectionType(type)) { return(CollectionToGraphSONCollection(objectData)); } return(objectData); }
/// <summary> /// Registers a custom GraphSON serializer for the given type. /// </summary> /// <param name="type">The type the serializer should be registered for.</param> /// <param name="serializer">The serializer to register.</param> public JanusGraphSONWriterBuilder RegisterSerializer(Type type, IGraphSONSerializer serializer) { _serializerByType[type] = serializer; return(this); }
/// <summary> /// Registers a custom GraphSON serializer for the given type. /// </summary> /// <param name="type">The type the serializer should be registered for.</param> /// <param name="serializer">The serializer to register.</param> public JanusGraphClientBuilder RegisterSerializer(Type type, IGraphSONSerializer serializer) { _writerBuilder.RegisterSerializer(type, serializer); return(this); }
IWebSocketGremlinQueryEnvironmentBuilder IWebSocketGremlinQueryEnvironmentBuilder.AddGraphSONSerializer(Type type, IGraphSONSerializer serializer) { return(_baseBuilder.AddGraphSONSerializer(type, serializer)); }
/// <summary> /// Transforms an object into its GraphSON representation including type information. /// </summary> /// <param name="objectData">The object to transform.</param> /// <param name="result">Output parameter with the GraphSON representation of the object ready to be serialized.</param> /// <returns>True if serialiation is successful and the output parameter was populated.</returns> public bool TryToDict(dynamic objectData, out dynamic result) { if (objectData == null) { result = null; return(true); } if (objectData is IGraphNode graphNode) { if (!(graphNode is GraphNode concreteGraphNode)) { throw new InvalidOperationException("Serialization of custom IGraphNode implementations is not supported."); } result = concreteGraphNode.GetRaw(); return(true); } var type = objectData.GetType(); if (_customSerializers != null) { var customSerializer = (IGraphSONSerializer)TryGetSerializerFor(_customSerializers, type); if (customSerializer != null) { result = customSerializer.Dictify(objectData, Writer); return(true); } } IGraphSONSerializer serializer = TryGetSerializerFor(Serializers, type); if (serializer != null) { result = serializer.Dictify(objectData, Writer); } else if (type == typeof(string)) { result = objectData; } else if (IsSet(type)) { result = SetToGraphSONSet(objectData); } else if (IsDictionary(objectData)) { result = DictToGraphSONDict(objectData); } else if (IsEnumerable(objectData)) { result = ListToGraphSONList(objectData); } else { return(TryHandleNotSupportedType(type, objectData, out result)); } return(true); }