示例#1
0
 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);
 }
示例#2
0
        /// <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);
        }
示例#3
0
 /// <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);
 }
示例#4
0
 /// <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);
        }