public void Serialize(string path)
{
try
{
foreach (var output in Outputs) output.BeforeSerialization();
foreach (var view in Views)
{
view.SetAdvancedConfigurations();
view.BeforeSerialization();
}
//serialize only not readonly metadata
foreach (ReportSource source in Sources)
{
source.TempConnections = source.Connections.ToList();
source.TempTables = source.MetaData.Tables.ToList();
source.TempJoins = source.MetaData.Joins.ToList();
source.TempEnums = source.MetaData.Enums.ToList();
source.Connections.RemoveAll(i => !i.IsEditable);
source.MetaData.Tables.RemoveAll(i => !i.IsEditable);
source.MetaData.Joins.RemoveAll(i => !i.IsEditable);
source.MetaData.Enums.RemoveAll(i => !i.IsEditable);
}
XmlSerializer serializer = new XmlSerializer(typeof(Report));
StreamWriter sw = new StreamWriter(path);
serializer.Serialize(sw, this);
sw.Close();
}
finally
{
foreach (ReportSource source in Sources)
{
source.Connections = source.TempConnections;
source.MetaData.Tables = source.TempTables;
source.MetaData.Joins = source.TempJoins;
source.MetaData.Enums = source.TempEnums;
}
foreach (var view in Views) view.AfterSerialization();
foreach (var output in Outputs) output.AfterSerialization();
}
}