diff --git a/source/Components/AvalonDock/Layout/LayoutAnchorableFloatingWindow.cs b/source/Components/AvalonDock/Layout/LayoutAnchorableFloatingWindow.cs
index 7db59a02..6bfe812c 100644
--- a/source/Components/AvalonDock/Layout/LayoutAnchorableFloatingWindow.cs
+++ b/source/Components/AvalonDock/Layout/LayoutAnchorableFloatingWindow.cs
@@ -1,4 +1,4 @@
-/************************************************************************
+/************************************************************************
AvalonDock
Copyright (C) 2007-2013 Xceed Software Inc.
@@ -155,13 +155,13 @@ public override void ReadXml(XmlReader reader)
XmlSerializer serializer;
if (reader.LocalName.Equals(nameof(LayoutAnchorablePaneGroup)))
- serializer = new XmlSerializer(typeof(LayoutAnchorablePaneGroup));
+ serializer = XmlSerializer.FromTypes(new[] { typeof(LayoutAnchorablePaneGroup) })[0];
else
{
var type = LayoutRoot.FindType(reader.LocalName);
if (type == null)
throw new ArgumentException("AvalonDock.LayoutAnchorableFloatingWindow doesn't know how to deserialize " + reader.LocalName);
- serializer = new XmlSerializer(type);
+ serializer = XmlSerializer.FromTypes(new[] { type })[0];
}
RootPanel = (LayoutAnchorablePaneGroup)serializer.Deserialize(reader);
}
diff --git a/source/Components/AvalonDock/Layout/LayoutFloatingWindow.cs b/source/Components/AvalonDock/Layout/LayoutFloatingWindow.cs
index 0a479b47..44ae1f14 100644
--- a/source/Components/AvalonDock/Layout/LayoutFloatingWindow.cs
+++ b/source/Components/AvalonDock/Layout/LayoutFloatingWindow.cs
@@ -1,4 +1,4 @@
-/************************************************************************
+/************************************************************************
AvalonDock
Copyright (C) 2007-2013 Xceed Software Inc.
@@ -61,7 +61,7 @@ public virtual void WriteXml(XmlWriter writer)
foreach (var child in Children)
{
var type = child.GetType();
- var serializer = new XmlSerializer(type);
+ var serializer = XmlSerializer.FromTypes(new[] { type })[0];
serializer.Serialize(writer, child);
}
}
diff --git a/source/Components/AvalonDock/Layout/LayoutGroup.cs b/source/Components/AvalonDock/Layout/LayoutGroup.cs
index 98f70163..7b243e8b 100644
--- a/source/Components/AvalonDock/Layout/LayoutGroup.cs
+++ b/source/Components/AvalonDock/Layout/LayoutGroup.cs
@@ -1,4 +1,4 @@
-/************************************************************************
+/************************************************************************
AvalonDock
Copyright (C) 2007-2013 Xceed Software Inc.
@@ -150,31 +150,16 @@ public virtual void ReadXml(System.Xml.XmlReader reader)
continue;
}
- XmlSerializer serializer = null;
- if (reader.LocalName == nameof(LayoutAnchorablePaneGroup))
- serializer = new XmlSerializer(typeof(LayoutAnchorablePaneGroup));
- else if (reader.LocalName == nameof(LayoutAnchorablePane))
- serializer = new XmlSerializer(typeof(LayoutAnchorablePane));
- else if (reader.LocalName == nameof(LayoutAnchorable))
- serializer = new XmlSerializer(typeof(LayoutAnchorable));
- else if (reader.LocalName == nameof(LayoutDocumentPaneGroup))
- serializer = new XmlSerializer(typeof(LayoutDocumentPaneGroup));
- else if (reader.LocalName == nameof(LayoutDocumentPane))
- serializer = new XmlSerializer(typeof(LayoutDocumentPane));
- else if (reader.LocalName == nameof(LayoutDocument))
- serializer = new XmlSerializer(typeof(LayoutDocument));
- else if (reader.LocalName == nameof(LayoutAnchorGroup))
- serializer = new XmlSerializer(typeof(LayoutAnchorGroup));
- else if (reader.LocalName == nameof(LayoutPanel))
- serializer = new XmlSerializer(typeof(LayoutPanel));
- else
- {
- var type = FindType(reader.LocalName);
- if (type == null)
- throw new ArgumentException("AvalonDock.LayoutGroup doesn't know how to deserialize " + reader.LocalName);
- serializer = new XmlSerializer(type);
- }
+ string fullName = String.Format("{0}.{1}", GetType().Namespace, reader.LocalName);
+ Type typeForSerializer = Type.GetType(fullName);
+
+ if (typeForSerializer == null)
+ typeForSerializer = FindType(reader.LocalName);
+
+ if (typeForSerializer == null)
+ throw new ArgumentException("AvalonDock.LayoutGroup doesn't know how to deserialize " + reader.LocalName);
+ XmlSerializer serializer = XmlSerializer.FromTypes(new[] { typeForSerializer })[0];
Children.Add((T)serializer.Deserialize(reader));
}
@@ -188,7 +173,7 @@ public virtual void WriteXml(System.Xml.XmlWriter writer)
foreach (var child in Children)
{
var type = child.GetType();
- var serializer = new XmlSerializer(type);
+ var serializer = XmlSerializer.FromTypes(new[] { type })[0];
serializer.Serialize(writer, child);
}
}
diff --git a/source/Components/AvalonDock/Layout/LayoutRoot.cs b/source/Components/AvalonDock/Layout/LayoutRoot.cs
index 2cad3519..73fe1b4a 100644
--- a/source/Components/AvalonDock/Layout/LayoutRoot.cs
+++ b/source/Components/AvalonDock/Layout/LayoutRoot.cs
@@ -1,4 +1,4 @@
-/************************************************************************
+/************************************************************************
AvalonDock
Copyright (C) 2007-2013 Xceed Software Inc.
@@ -885,47 +885,47 @@ private object ReadElement(XmlReader reader)
while (reader.NodeType == XmlNodeType.Whitespace) reader.Read();
if (reader.NodeType == XmlNodeType.EndElement) return null;
- XmlSerializer serializer;
+ Type typeToSerialize;
switch (reader.LocalName)
{
case nameof(LayoutAnchorablePaneGroup):
- serializer = new XmlSerializer(typeof(LayoutAnchorablePaneGroup));
+ typeToSerialize = typeof(LayoutAnchorablePaneGroup);
break;
case nameof(LayoutAnchorablePane):
- serializer = new XmlSerializer(typeof(LayoutAnchorablePane));
+ typeToSerialize = typeof(LayoutAnchorablePane);
break;
case nameof(LayoutAnchorable):
- serializer = new XmlSerializer(typeof(LayoutAnchorable));
+ typeToSerialize = typeof(LayoutAnchorable);
break;
case nameof(LayoutDocumentPaneGroup):
- serializer = new XmlSerializer(typeof(LayoutDocumentPaneGroup));
+ typeToSerialize = typeof(LayoutDocumentPaneGroup);
break;
case nameof(LayoutDocumentPane):
- serializer = new XmlSerializer(typeof(LayoutDocumentPane));
+ typeToSerialize = typeof(LayoutDocumentPane);
break;
case nameof(LayoutDocument):
- serializer = new XmlSerializer(typeof(LayoutDocument));
+ typeToSerialize = typeof(LayoutDocument);
break;
case nameof(LayoutAnchorGroup):
- serializer = new XmlSerializer(typeof(LayoutAnchorGroup));
+ typeToSerialize = typeof(LayoutAnchorGroup);
break;
case nameof(LayoutPanel):
- serializer = new XmlSerializer(typeof(LayoutPanel));
+ typeToSerialize = typeof(LayoutPanel);
break;
case nameof(LayoutDocumentFloatingWindow):
- serializer = new XmlSerializer(typeof(LayoutDocumentFloatingWindow));
+ typeToSerialize = typeof(LayoutDocumentFloatingWindow);
break;
case nameof(LayoutAnchorableFloatingWindow):
- serializer = new XmlSerializer(typeof(LayoutAnchorableFloatingWindow));
+ typeToSerialize = typeof(LayoutAnchorableFloatingWindow);
break;
case nameof(LeftSide):
@@ -940,13 +940,12 @@ private object ReadElement(XmlReader reader)
return reader.Read();
default:
- var type = FindType(reader.LocalName);
- if (type == null)
+ typeToSerialize = FindType(reader.LocalName);
+ if (typeToSerialize == null)
throw new ArgumentException("AvalonDock.LayoutRoot doesn't know how to deserialize " + reader.LocalName);
- serializer = new XmlSerializer(type);
break;
}
-
+ XmlSerializer serializer = XmlSerializer.FromTypes(new[] { typeToSerialize })[0];
return serializer.Deserialize(reader);
}
diff --git a/source/Components/AvalonDock/Layout/Serialization/LayoutSerializer.cs b/source/Components/AvalonDock/Layout/Serialization/LayoutSerializer.cs
index 7e7d0466..7244045f 100644
--- a/source/Components/AvalonDock/Layout/Serialization/LayoutSerializer.cs
+++ b/source/Components/AvalonDock/Layout/Serialization/LayoutSerializer.cs
@@ -1,4 +1,4 @@
-/************************************************************************
+/************************************************************************
AvalonDock
Copyright (C) 2007-2013 Xceed Software Inc.
@@ -76,6 +76,9 @@ protected virtual void FixupLayout(LayoutRoot layout)
if (lcToFix.ContentId != null)
previousAchorable = _previousAnchorables.FirstOrDefault(a => a.ContentId == lcToFix.ContentId);
+ if (previousAchorable != null && previousAchorable.Title != null)
+ lcToFix.Title = previousAchorable.Title;
+
if (LayoutSerializationCallback != null)
{
// Ask client application via callback if item should be deserialized
diff --git a/source/Components/AvalonDock/Layout/Serialization/XmlLayoutSerializer.cs b/source/Components/AvalonDock/Layout/Serialization/XmlLayoutSerializer.cs
index 438c472f..d883b82d 100644
--- a/source/Components/AvalonDock/Layout/Serialization/XmlLayoutSerializer.cs
+++ b/source/Components/AvalonDock/Layout/Serialization/XmlLayoutSerializer.cs
@@ -1,4 +1,4 @@
-/************************************************************************
+/************************************************************************
AvalonDock
Copyright (C) 2007-2013 Xceed Software Inc.
@@ -29,30 +29,53 @@ public XmlLayoutSerializer(DockingManager manager)
#endregion Constructors
+ #region Private Methods
+ /// Desererialized LayoutRoot
+ /// Function for LayoutRoot deserialization.
+
+ private delegate LayoutRoot DeserializeFunction();
+
+ /// Deserializes layout with the given function .
+ ///
+ private void DeserializeCommon(DeserializeFunction function)
+ {
+ try
+ {
+ StartDeserialization();
+ var layout = function();
+ FixupLayout(layout);
+ Manager.Layout = layout;
+ }
+ finally
+ {
+ EndDeserialization();
+ }
+ }
+ #endregion
+
#region Public Methods
+ readonly XmlSerializer _serializer = XmlSerializer.FromTypes(new[] { typeof(LayoutRoot) })[0];
+
/// Serialize the layout into a .
///
public void Serialize(XmlWriter writer)
{
- var serializer = new XmlSerializer(typeof(LayoutRoot));
- serializer.Serialize(writer, Manager.Layout);
+ _serializer.Serialize(writer, Manager.Layout);
}
/// Serialize the layout into a .
///
public void Serialize(TextWriter writer)
{
- var serializer = new XmlSerializer(typeof(LayoutRoot));
- serializer.Serialize(writer, Manager.Layout);
+ _serializer.Serialize(writer, Manager.Layout);
}
/// Serialize the layout into a .
///
public void Serialize(Stream stream)
{
- var serializer = new XmlSerializer(typeof(LayoutRoot));
- serializer.Serialize(stream, Manager.Layout);
+ _serializer.Serialize(stream, Manager.Layout);
}
/// Serialize the layout into a file using a .
@@ -67,54 +90,26 @@ public void Serialize(string filepath)
///
public void Deserialize(System.IO.Stream stream)
{
- try
- {
- StartDeserialization();
- var serializer = new XmlSerializer(typeof(LayoutRoot));
- var layout = serializer.Deserialize(stream) as LayoutRoot;
- FixupLayout(layout);
- Manager.Layout = layout;
- }
- finally
- {
- EndDeserialization();
- }
+ LayoutRoot function() => _serializer.Deserialize(stream) as LayoutRoot;
+ DeserializeCommon(function);
}
/// Deserialize the layout a file from a .
///
public void Deserialize(TextReader reader)
{
- try
- {
- StartDeserialization();
- var serializer = new XmlSerializer(typeof(LayoutRoot));
- var layout = serializer.Deserialize(reader) as LayoutRoot;
- FixupLayout(layout);
- Manager.Layout = layout;
- }
- finally
- {
- EndDeserialization();
- }
+
+ LayoutRoot function() => _serializer.Deserialize(reader) as LayoutRoot;
+ DeserializeCommon(function);
}
/// Deserialize the layout a file from a .
///
public void Deserialize(XmlReader reader)
{
- try
- {
- StartDeserialization();
- var serializer = new XmlSerializer(typeof(LayoutRoot));
- var layout = serializer.Deserialize(reader) as LayoutRoot;
- FixupLayout(layout);
- Manager.Layout = layout;
- }
- finally
- {
- EndDeserialization();
- }
+
+ LayoutRoot function() => _serializer.Deserialize(reader) as LayoutRoot;
+ DeserializeCommon(function);
}
/// Deserialize the layout from a file using a .