Skip to content

Commit 79c4e4a

Browse files
committed
- sync flag argument hack
1 parent 6cdd480 commit 79c4e4a

1 file changed

Lines changed: 28 additions & 34 deletions

File tree

Shuttle.Core.Serialization/DefaultSerializer.cs

Lines changed: 28 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -47,25 +47,15 @@ public DefaultSerializer()
4747

4848
public Stream Serialize(object instance)
4949
{
50-
Guard.AgainstNull(instance, nameof(instance));
51-
52-
var messageType = instance.GetType();
53-
var serializer = GetSerializer(messageType);
54-
55-
var xml = new StringBuilder();
56-
57-
using var writer = XmlWriter.Create(xml, _xmlWriterSettings);
58-
59-
serializer.Serialize(writer, instance, _namespaces);
60-
61-
writer.Flush();
62-
63-
var data = Encoding.UTF8.GetBytes(xml.ToString());
64-
65-
return new MemoryStream(data, 0, data.Length, false, true);
50+
return SerializeAsync(instance, true).GetAwaiter().GetResult();
6651
}
6752

6853
public async Task<Stream> SerializeAsync(object instance)
54+
{
55+
return await SerializeAsync(instance, false).ConfigureAwait(false);
56+
}
57+
58+
private async Task<Stream> SerializeAsync(object instance, bool sync)
6959
{
7060
Guard.AgainstNull(instance, nameof(instance));
7161

@@ -78,7 +68,14 @@ public async Task<Stream> SerializeAsync(object instance)
7868

7969
serializer.Serialize(writer, instance, _namespaces);
8070

81-
await writer.FlushAsync().ConfigureAwait(false);
71+
if (sync)
72+
{
73+
writer.Flush();
74+
}
75+
else
76+
{
77+
await writer.FlushAsync().ConfigureAwait(false);
78+
}
8279

8380
var data = Encoding.UTF8.GetBytes(xml.ToString());
8481

@@ -87,25 +84,15 @@ public async Task<Stream> SerializeAsync(object instance)
8784

8885
public object Deserialize(Type type, Stream stream)
8986
{
90-
Guard.AgainstNull(type, nameof(type));
91-
Guard.AgainstNull(stream, nameof(stream));
92-
93-
using var copy = new MemoryStream();
94-
95-
var position = stream.Position;
96-
97-
stream.Position = 0;
98-
stream.CopyTo(copy);
99-
100-
stream.Position = position;
101-
copy.Position = 0;
102-
103-
using var reader = XmlDictionaryReader.CreateTextReader(copy, Encoding.UTF8, _xmlDictionaryReaderQuotas, null);
104-
105-
return GetSerializer(type).Deserialize(reader);
87+
return DeserializeAsync(type, stream, true).GetAwaiter().GetResult();
10688
}
10789

10890
public async Task<object> DeserializeAsync(Type type, Stream stream)
91+
{
92+
return await DeserializeAsync(type, stream, false).ConfigureAwait(false);
93+
}
94+
95+
private async Task<object> DeserializeAsync(Type type, Stream stream, bool sync)
10996
{
11097
Guard.AgainstNull(type, nameof(type));
11198
Guard.AgainstNull(stream, nameof(stream));
@@ -115,7 +102,14 @@ public async Task<object> DeserializeAsync(Type type, Stream stream)
115102

116103
stream.Position = 0;
117104

118-
await stream.CopyToAsync(copy).ConfigureAwait(false);
105+
if (sync)
106+
{
107+
stream.CopyTo(copy);
108+
}
109+
else
110+
{
111+
await stream.CopyToAsync(copy).ConfigureAwait(false);
112+
}
119113

120114
stream.Position = position;
121115
copy.Position = 0;

0 commit comments

Comments
 (0)