/// <summary> /// Initilizes new instance of <see cref="T:NCoreUtils.Serialization.ObjectSerializer" /> with the specified /// parameters. /// </summary> /// <param name="factory">Type serializer factory.</param> /// <param name="targetType">Handled type.</param> /// <param name="accessors">All serializable accessors.</param> /// <param name="objectFactory">Object factory to use.</param> public ObjectSerializer(TypeSerializerFactory factory, Type targetType, ImmutableArray <IAccessor> accessors, IObjectFactory objectFactory) : base(factory, targetType) { //FIXME: Handle members hiding inherited members... Accessors = ImmutableDictionary.CreateRange(accessors.Select(a => new KeyValuePair <string, IAccessor>(a.Name, a))); ObjectFactory = objectFactory; }
/// <summary> /// Serializes object to the specified writer. /// </summary> /// <param name="writer">Data writer.</param> /// <param name="obj">Source object.</param> protected virtual void Serialize(IDataWriter writer, object obj) { if (null == obj) { writer.WriteNull(); } else { TypeSerializerFactory.GetSerializer(obj.GetType(), ServiceProvider).WriteObject(obj, writer, ServiceProvider); } }
/// <summary> /// Deserializes object from reader. /// </summary> /// <param name="reader">Data reader.</param> /// <param name="type">Target object type.</param> /// <returns>Deserialized object.</returns> protected virtual object Deserialize(IDataReader reader, Type type) { return(TypeSerializerFactory.GetSerializer(type, ServiceProvider).ReadObject(reader, ServiceProvider)); }
/// <summary> /// Instantiates default array serializer for the specified element type. /// </summary> /// <param name="factory">Type serializer factory.</param> /// <param name="elementType">Array element type.</param> /// <param name="serviceProvider">Service provider to use.</param> /// <returns>Initialized default array serializer.</returns> public static TypeSerializer Create(TypeSerializerFactory factory, Type elementType, IServiceProvider serviceProvider) { var serializerType = typeof(ArraySerializer <>).MakeGenericType(elementType); return((TypeSerializer)Activator.CreateInstance(serializerType, factory)); }