diff --git a/Orm/Xtensive.Orm/Core/SimpleXmlSerializer.cs b/Orm/Xtensive.Orm/Core/SimpleXmlSerializer.cs
index 450e91ab2..568160129 100644
--- a/Orm/Xtensive.Orm/Core/SimpleXmlSerializer.cs
+++ b/Orm/Xtensive.Orm/Core/SimpleXmlSerializer.cs
@@ -34,10 +34,13 @@ public T Deserialize(string value)
{
ArgumentNullException.ThrowIfNull(value, "serialized");
- using (var reader = new StringReader(value))
- return (T) serializer.Deserialize(reader);
+ using StringReader reader = new(value);
+ return (T) serializer.Deserialize(reader);
}
+ public T DeserializeFromStream(Stream stream) =>
+ (T) serializer.Deserialize(stream);
+
///
/// Serializes value of to string.
///
@@ -53,5 +56,13 @@ public string Serialize(T value)
}
return stringWriter.ToString();
}
+
+ public void SerializeIntoStream(T value, Stream stream)
+ {
+ ArgumentNullException.ThrowIfNull(value);
+
+ using var xmlWriter = XmlWriter.Create(stream, WriterSettings);
+ serializer.Serialize(xmlWriter, value);
+ }
}
}
diff --git a/Orm/Xtensive.Orm/Orm/Model/Stored/StoredDomainModel.cs b/Orm/Xtensive.Orm/Orm/Model/Stored/StoredDomainModel.cs
index 9c17c9700..c8a266c9e 100644
--- a/Orm/Xtensive.Orm/Orm/Model/Stored/StoredDomainModel.cs
+++ b/Orm/Xtensive.Orm/Orm/Model/Stored/StoredDomainModel.cs
@@ -48,21 +48,16 @@ public sealed class StoredDomainModel
public static StoredDomainModel Deserialize(string serialized, byte[] data)
{
if (data != null) {
- string xml;
switch (data[0]) {
case 0:
- xml = Encoding.UTF8.GetString(data, 1, data.Length - 1);
- break;
+ return Serializer.Deserialize(Encoding.UTF8.GetString(data, 1, data.Length - 1));
case 1:
using (BrotliStream brotliStream = new(new MemoryStream(data, 1, data.Length - 1), CompressionMode.Decompress)) {
- using StreamReader reader = new(brotliStream, Encoding.UTF8);
- xml = reader.ReadToEnd();
+ return Serializer.DeserializeFromStream(brotliStream);
}
- break;
default:
throw new NotSupportedException("Invalid data format");
}
- return Serializer.Deserialize(xml);
}
return Serializer.Deserialize(serialized);
}
@@ -73,17 +68,12 @@ public static StoredDomainModel Deserialize(string serialized, byte[] data)
/// Serialized instance.
public (string Xml, byte[] Compressed) Serialize()
{
- var xml = Serializer.Serialize(this);
MemoryStream ms = new(1000);
- ms.WriteByte(1);
+ ms.WriteByte(1); // 1 - means Brotli method
using (BrotliStream brotliStream = new(ms, CompressionLevel.Optimal)) {
- brotliStream.Write(Encoding.UTF8.GetBytes(xml));
+ Serializer.SerializeIntoStream(this, brotliStream);
}
-
- //!!!TODO Uncomment following line to switch to Compressed XML serialization
- // return (null, ms.ToArray());
-
- return (xml, ms.ToArray());
+ return (null, ms.ToArray());
}
///
diff --git a/Orm/Xtensive.Orm/Orm/Upgrade/SystemUpgradeHandler.cs b/Orm/Xtensive.Orm/Orm/Upgrade/SystemUpgradeHandler.cs
index 120a8df67..540c84765 100644
--- a/Orm/Xtensive.Orm/Orm/Upgrade/SystemUpgradeHandler.cs
+++ b/Orm/Xtensive.Orm/Orm/Upgrade/SystemUpgradeHandler.cs
@@ -200,8 +200,8 @@ private Dictionary BuildMetadata(Domain domain, TypeIdRegis
// Since we support storage nodes, stored domain model and real model of a node
// must be synchronized. So we must update types' mappings
storedModel.UpdateMappings(UpgradeContext.NodeConfiguration);
- var (serializedModel, compressed) = storedModel.Serialize();
- var modelExtension = new ExtensionMetadata(WellKnown.DomainModelExtensionName, serializedModel, compressed);
+ var (_, compressed) = storedModel.Serialize();
+ var modelExtension = new ExtensionMetadata(WellKnown.DomainModelExtensionName, null, compressed);
var indexesExtension = GetPartialIndexes(domain, types);
metadata.Assemblies.AddRange(assemblyMetadata);
metadata.Types.AddRange(typeMetadata);
diff --git a/Version.props b/Version.props
index 4f2cf662b..efc202636 100644
--- a/Version.props
+++ b/Version.props
@@ -2,7 +2,7 @@
- 7.2.167
+ 7.2.168
servicetitan