/// <summary> /// Copies this configuration and re-instantiates all serializers. /// </summary> /// <returns>A new <see cref="Configuration"/></returns> public Configuration Copy() { var config = new Configuration(false); config.Format = Format; foreach (var ps in primitiveSerializers) config.primitiveSerializers.Add( ps.Key, (IPrimitiveSerializer)Activator.CreateInstance(ps.Value.GetType())); foreach (var cs in compositeSerializers) config.compositeSerializers.Add((ICompositeSerializer)Activator.CreateInstance(cs.GetType())); return config; }
/// <summary> /// Serializes the specified object into a file. /// Needed assemblies are not included, ZIP compression level is set to 5. /// </summary> /// <param name="obj">The object.</param> /// <param name="filename">The filename.</param> /// <param name="config">The configuration.</param> public new static void Serialize(object obj, string filename, Configuration config) { try { string tempfile = Path.GetTempFileName(); DateTime start = DateTime.Now; using (FileStream stream = File.Create(tempfile)) { Serialize(obj, stream, config); } Logger.Info(String.Format("easy serialization took {0} seconds", (DateTime.Now - start).TotalSeconds)); File.Copy(tempfile, filename, true); File.Delete(tempfile); } catch (Exception) { Logger.Warn("Exception caught, no data has been written."); throw; } }
/// <summary> /// Serializes the specified object into a stream. /// </summary> /// <param name="obj">The object.</param> /// <param name="stream">The stream.</param> /// <param name="config">The configuration.</param> public static void Serialize(object obj, Stream stream, Configuration config) { try { using (StreamWriter writer = new StreamWriter(stream)) { Serializer serializer = new Serializer(obj, config); serializer.InterleaveTypeInformation = true; ReadableXmlGenerator generator = new ReadableXmlGenerator(); foreach (ISerializationToken token in serializer) { string line = generator.Format(token); writer.Write(line); } writer.Flush(); } } catch (PersistenceException) { throw; } catch (Exception e) { throw new PersistenceException("Unexpected exception during Serialization.", e); } }
/// <summary> /// Define a new custom configuration for a ceratin format. /// </summary> /// <param name="configuration">The new configuration.</param> public void DefineConfiguration(Configuration configuration) { customConfigurations[configuration.Format] = configuration.Copy(); SaveSettings(); }