Skip to content

Commit fe10837

Browse files
committed
- added back synchronous methods
1 parent 6b7b793 commit fe10837

4 files changed

Lines changed: 115 additions & 31 deletions

File tree

Shuttle.Core.Serialization.Tests/DefaultSerializerFixture.cs

Lines changed: 54 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,24 +8,70 @@ namespace Shuttle.Core.Serialization.Tests
88
public class DefaultSerializerFixture
99
{
1010
[Test]
11-
public async Task Should_be_able_to_serialize_and_deserialize_a_simple_type()
11+
public void Should_be_able_to_serialize_and_deserialize_a_simple_type()
1212
{
1313
var original = new SimpleSerializerType();
1414
var serializer = new DefaultSerializer();
1515

16-
var stream = await serializer.Serialize(original);
16+
var stream = serializer.Serialize(original);
17+
18+
var xml = new StreamReader(stream).ReadToEnd();
19+
20+
Assert.IsTrue(xml.Contains(original.Id.ToString()));
21+
22+
stream.Position = 0;
23+
24+
Assert.AreEqual(original.Id, ((SimpleSerializerType)serializer.Deserialize(typeof(SimpleSerializerType), stream)).Id);
25+
}
26+
27+
[Test]
28+
public async Task Should_be_able_to_serialize_and_deserialize_a_simple_type_async()
29+
{
30+
var original = new SimpleSerializerType();
31+
var serializer = new DefaultSerializer();
32+
33+
var stream = await serializer.SerializeAsync(original);
1734

1835
var xml = await new StreamReader(stream).ReadToEndAsync();
1936

2037
Assert.IsTrue(xml.Contains(original.Id.ToString()));
2138

2239
stream.Position = 0;
2340

24-
Assert.AreEqual(original.Id, ((SimpleSerializerType)await serializer.Deserialize(typeof(SimpleSerializerType), stream)).Id);
41+
Assert.AreEqual(original.Id, ((SimpleSerializerType)await serializer.DeserializeAsync(typeof(SimpleSerializerType), stream)).Id);
42+
}
43+
44+
[Test]
45+
public void Should_be_able_to_serialize_and_deserialize_a_complex_type()
46+
{
47+
var complex = new ComplexSerializerType();
48+
var serializer = new DefaultSerializer();
49+
50+
serializer.AddSerializerType(typeof(ComplexSerializerType), typeof(v1.SomeSerializerType));
51+
serializer.AddSerializerType(typeof(ComplexSerializerType), typeof(v1.AnotherSerializerType));
52+
serializer.AddSerializerType(typeof(ComplexSerializerType), typeof(v2.SomeSerializerType));
53+
serializer.AddSerializerType(typeof(ComplexSerializerType), typeof(v2.AnotherSerializerType));
54+
55+
var stream = serializer.Serialize(complex);
56+
var xml = new StreamReader(stream).ReadToEnd();
57+
58+
Assert.IsTrue(xml.Contains(complex.Id.ToString()));
59+
60+
stream.Position = 0;
61+
62+
Assert.AreEqual(complex.Id, ((ComplexSerializerType)serializer.Deserialize(typeof(ComplexSerializerType), stream)).Id);
63+
64+
Console.WriteLine(xml);
65+
66+
var some1 = new v1.SomeSerializerType();
67+
var some2 = new v2.SomeSerializerType();
68+
69+
Assert.AreEqual(some1.Id, ((v1.SomeSerializerType)serializer.Deserialize(typeof(v1.SomeSerializerType), serializer.Serialize(some1))).Id);
70+
Assert.AreEqual(some2.Id, ((v2.SomeSerializerType)serializer.Deserialize(typeof(v2.SomeSerializerType), serializer.Serialize(some2))).Id);
2571
}
2672

2773
[Test]
28-
public async Task Should_be_able_to_serialize_and_deserialize_a_complex_type()
74+
public async Task Should_be_able_to_serialize_and_deserialize_a_complex_type_async()
2975
{
3076
var complex = new ComplexSerializerType();
3177
var serializer = new DefaultSerializer();
@@ -35,22 +81,22 @@ public async Task Should_be_able_to_serialize_and_deserialize_a_complex_type()
3581
serializer.AddSerializerType(typeof(ComplexSerializerType), typeof(v2.SomeSerializerType));
3682
serializer.AddSerializerType(typeof(ComplexSerializerType), typeof(v2.AnotherSerializerType));
3783

38-
var stream = await serializer.Serialize(complex);
84+
var stream = await serializer.SerializeAsync(complex);
3985
var xml = await new StreamReader(stream).ReadToEndAsync();
4086

4187
Assert.IsTrue(xml.Contains(complex.Id.ToString()));
4288

4389
stream.Position = 0;
4490

45-
Assert.AreEqual(complex.Id, ((ComplexSerializerType)await serializer.Deserialize(typeof(ComplexSerializerType), stream)).Id);
91+
Assert.AreEqual(complex.Id, ((ComplexSerializerType)await serializer.DeserializeAsync(typeof(ComplexSerializerType), stream)).Id);
4692

4793
Console.WriteLine(xml);
4894

4995
var some1 = new v1.SomeSerializerType();
5096
var some2 = new v2.SomeSerializerType();
5197

52-
Assert.AreEqual(some1.Id, ((v1.SomeSerializerType)await serializer.Deserialize(typeof(v1.SomeSerializerType), await serializer.Serialize(some1))).Id);
53-
Assert.AreEqual(some2.Id, ((v2.SomeSerializerType)await serializer.Deserialize(typeof(v2.SomeSerializerType), await serializer.Serialize(some2))).Id);
98+
Assert.AreEqual(some1.Id, ((v1.SomeSerializerType)await serializer.DeserializeAsync(typeof(v1.SomeSerializerType), await serializer.SerializeAsync(some1))).Id);
99+
Assert.AreEqual(some2.Id, ((v2.SomeSerializerType)await serializer.DeserializeAsync(typeof(v2.SomeSerializerType), await serializer.SerializeAsync(some2))).Id);
54100
}
55101
}
56102
}

Shuttle.Core.Serialization/DefaultSerializer.cs

Lines changed: 56 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public DefaultSerializer()
4545

4646
public string Name => "Xml";
4747

48-
public async Task<Stream> Serialize(object instance)
48+
public Stream Serialize(object instance)
4949
{
5050
Guard.AgainstNull(instance, nameof(instance));
5151

@@ -54,39 +54,75 @@ public async Task<Stream> Serialize(object instance)
5454

5555
var xml = new StringBuilder();
5656

57-
using (var writer = XmlWriter.Create(xml, _xmlWriterSettings))
58-
{
59-
serializer.Serialize(writer, instance, _namespaces);
57+
using var writer = XmlWriter.Create(xml, _xmlWriterSettings);
58+
59+
serializer.Serialize(writer, instance, _namespaces);
6060

61-
await writer.FlushAsync().ConfigureAwait(false);
62-
}
61+
writer.Flush();
62+
63+
var data = Encoding.UTF8.GetBytes(xml.ToString());
64+
65+
return new MemoryStream(data, 0, data.Length, false, true);
66+
}
67+
68+
public async Task<Stream> SerializeAsync(object instance)
69+
{
70+
Guard.AgainstNull(instance, nameof(instance));
71+
72+
var messageType = instance.GetType();
73+
var serializer = GetSerializer(messageType);
74+
75+
var xml = new StringBuilder();
76+
77+
using var writer = XmlWriter.Create(xml, _xmlWriterSettings);
78+
79+
serializer.Serialize(writer, instance, _namespaces);
80+
81+
await writer.FlushAsync().ConfigureAwait(false);
6382

6483
var data = Encoding.UTF8.GetBytes(xml.ToString());
6584

6685
return new MemoryStream(data, 0, data.Length, false, true);
6786
}
6887

69-
public async Task<object> Deserialize(Type type, Stream stream)
88+
public object Deserialize(Type type, Stream stream)
7089
{
7190
Guard.AgainstNull(type, nameof(type));
7291
Guard.AgainstNull(stream, nameof(stream));
7392

74-
using (var copy = new MemoryStream())
75-
{
76-
var position = stream.Position;
93+
using var copy = new MemoryStream();
7794

78-
stream.Position = 0;
95+
var position = stream.Position;
7996

80-
await stream.CopyToAsync(copy).ConfigureAwait(false);
97+
stream.Position = 0;
98+
stream.CopyTo(copy);
8199

82-
stream.Position = position;
83-
copy.Position = 0;
84-
85-
using (var reader = XmlDictionaryReader.CreateTextReader(copy, Encoding.UTF8, _xmlDictionaryReaderQuotas, null))
86-
{
87-
return GetSerializer(type).Deserialize(reader);
88-
}
89-
}
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);
106+
}
107+
108+
public async Task<object> DeserializeAsync(Type type, Stream stream)
109+
{
110+
Guard.AgainstNull(type, nameof(type));
111+
Guard.AgainstNull(stream, nameof(stream));
112+
113+
using var copy = new MemoryStream();
114+
var position = stream.Position;
115+
116+
stream.Position = 0;
117+
118+
await stream.CopyToAsync(copy).ConfigureAwait(false);
119+
120+
stream.Position = position;
121+
copy.Position = 0;
122+
123+
using var reader = XmlDictionaryReader.CreateTextReader(copy, Encoding.UTF8, _xmlDictionaryReaderQuotas, null);
124+
125+
return GetSerializer(type).Deserialize(reader);
90126
}
91127

92128
public void AddSerializerType(Type root, Type contained)

Shuttle.Core.Serialization/ISerializer.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ namespace Shuttle.Core.Serialization
77
public interface ISerializer
88
{
99
string Name { get; }
10-
Task<Stream> Serialize(object instance);
11-
Task<object> Deserialize(Type type, Stream stream);
10+
Stream Serialize(object instance);
11+
object Deserialize(Type type, Stream stream);
12+
Task<Stream> SerializeAsync(object instance);
13+
Task<object> DeserializeAsync(Type type, Stream stream);
1214
}
1315
}

Shuttle.Core.Serialization/Shuttle.Core.Serialization.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFrameworks>netstandard2.0;netstandard2.1</TargetFrameworks>
4+
<TargetFrameworks>netstandard2.1</TargetFrameworks>
55
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
66
</PropertyGroup>
77

0 commit comments

Comments
 (0)