static SerializerSelector() { // Do a two step initialization to make sure field is set and accessible during construction Default = new SerializerSelector(false, -1, "Default"); Default.Initialize(); Asset = new SerializerSelector(false, -1, "Default", "Content"); Asset.Initialize(); AssetWithReuse = new SerializerSelector(true, -1, "Default", "Content"); AssetWithReuse.Initialize(); }
public override DataSerializer GetSerializer(SerializerSelector selector, [NotNull] Type type) { DataSerializer dataSerializer; if (!serializersByType.TryGetValue(type, out dataSerializer)) { if (baseType.GetTypeInfo().IsAssignableFrom(type.GetTypeInfo())) { dataSerializer = (DataSerializer)Activator.CreateInstance(serializerGenericType.MakeGenericType(type)); selector.EnsureInitialized(dataSerializer); serializersByTypeId.TryAdd(dataSerializer.SerializationTypeId, dataSerializer); } // Add it even if null (so that failures are cached too) serializersByType.TryAdd(type, dataSerializer); } return(dataSerializer); }
public static void RegisterSerializerSelector(SerializerSelector serializerSelector) { SerializerSelectors.Add(new WeakReference <SerializerSelector>(serializerSelector)); }
/// <summary> /// Initializes the specified serializer. /// </summary> /// <remarks>This method should be thread-safe and OK to call multiple times.</remarks> /// <param name="serializerSelector">The serializer.</param> public virtual void Initialize([NotNull] SerializerSelector serializerSelector) { }
public abstract DataSerializer GetSerializer(SerializerSelector selector, Type type);
public abstract DataSerializer GetSerializer(SerializerSelector selector, ref ObjectId typeId);