Skip to content

Commit dfa7922

Browse files
committed
21.0.1-rc3 / Documentation.
1 parent 28bcfdf commit dfa7922

File tree

3 files changed

+104
-23
lines changed

3 files changed

+104
-23
lines changed

README.md

Lines changed: 63 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,95 @@
11
# Shuttle.Core.Serialization
22

3+
The `Shuttle.Core.Serialization` package provides a consistent interface for serializing and deserializing objects.
4+
35
## Installation
46

57
```bash
68
dotnet add package Shuttle.Core.Serialization
79
```
810

9-
The following implementation of the `ISerializer` interface is used to serialize objects into a `Stream`:
11+
## Interface
1012

11-
- `JsonSerializer` makes use of the `System.Text.Json` serialization functionality.
13+
The core of the library is the `ISerializer` interface:
1214

13-
## Usage
15+
```csharp
16+
public interface ISerializer
17+
{
18+
string Name { get; }
19+
Task<Stream> SerializeAsync(object instance, CancellationToken cancellationToken = default);
20+
Task<object> DeserializeAsync(Type type, Stream stream, CancellationToken cancellationToken = default);
21+
}
22+
```
23+
24+
The following implementation is provided:
25+
26+
- `JsonSerializer`: uses `System.Text.Json` for serialization.
1427

15-
### JsonSerializer
28+
## Usage
1629

17-
``` c#
18-
services.AddJsonSerializer(builder => {
19-
builder.Options = new JsonSerializerOptions
20-
{
21-
};
30+
### AddJsonSerializer
2231

23-
// or
32+
To register the `JsonSerializer`, use the `AddJsonSerializer` extension method on `IServiceCollection`:
2433

25-
builder.Options.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
34+
```csharp
35+
services.AddJsonSerializer(builder =>
36+
{
37+
builder.Options.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
2638
});
2739
```
2840

2941
The `builder.Options` is of type [JsonSerializerOptions](https://docs.microsoft.com/en-us/dotnet/api/system.text.json.jsonserializeroptions?view=net-6.0).
3042

43+
### ISerializerService
44+
45+
The `ISerializerService` can be used to manage multiple serializers:
46+
47+
```csharp
48+
public interface ISerializerService
49+
{
50+
IEnumerable<ISerializer> Serializers { get; }
51+
ISerializerService Add(ISerializer serializer);
52+
bool Contains(string name);
53+
ISerializer Get(string name);
54+
}
55+
```
56+
57+
You can use the `SerializerService` implementation to store and retrieve serializers by their `Name`:
58+
59+
```csharp
60+
var serializerService = new SerializerService();
61+
62+
serializerService.Add(new JsonSerializer(Options.Create(new JsonSerializerOptions())));
63+
64+
if (serializerService.Contains("Json"))
65+
{
66+
var serializer = serializerService.Get("Json");
67+
}
68+
```
69+
3170
## Methods
3271

33-
### Serialize
72+
### SerializeAsync
3473

35-
``` c#
74+
```csharp
3675
Task<Stream> SerializeAsync(object instance, CancellationToken cancellationToken = default);
3776
```
3877

3978
Returns the `object` as a `Stream`.
4079

41-
### Deserialize
80+
### DeserializeAsync
4281

43-
``` c#
82+
```csharp
4483
Task<object> DeserializeAsync(Type type, Stream stream, CancellationToken cancellationToken = default);
4584
```
4685

47-
Deserializes the `Stream` into an `object` of the given type.
86+
Deserializes the `Stream` into an `object` of the given `Type`.
87+
88+
### DeserializeAsync&lt;T&gt; (Extension method)
89+
90+
```csharp
91+
Task<T> DeserializeAsync<T>(Stream stream, CancellationToken cancellationToken = default);
92+
```
93+
94+
Deserializes the `Stream` into an `object` of the given type `T`.
4895

Shuttle.Core.Serialization/ServiceCollectionExtensions.cs

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
using Microsoft.Extensions.DependencyInjection;
2-
using Microsoft.Extensions.Options;
1+
using System.Text.Json;
2+
using Microsoft.Extensions.DependencyInjection;
33
using Shuttle.Core.Contract;
44

55
namespace Shuttle.Core.Serialization;
@@ -18,7 +18,41 @@ public IServiceCollection AddJsonSerializer(Action<JsonSerializerBuilder>? build
1818

1919
services.AddSingleton<ISerializer, JsonSerializer>();
2020

21-
services.AddSingleton(Options.Create(jsonSerializerBuilder.Options));
21+
services.Configure<JsonSerializerOptions>(options =>
22+
{
23+
options.AllowDuplicateProperties = jsonSerializerBuilder.Options.AllowDuplicateProperties;
24+
options.AllowOutOfOrderMetadataProperties = jsonSerializerBuilder.Options.AllowOutOfOrderMetadataProperties;
25+
options.AllowTrailingCommas = jsonSerializerBuilder.Options.AllowTrailingCommas;
26+
options.PropertyNamingPolicy = jsonSerializerBuilder.Options.PropertyNamingPolicy;
27+
options.PropertyNameCaseInsensitive = jsonSerializerBuilder.Options.PropertyNameCaseInsensitive;
28+
options.DictionaryKeyPolicy = jsonSerializerBuilder.Options.DictionaryKeyPolicy;
29+
options.DefaultIgnoreCondition = jsonSerializerBuilder.Options.DefaultIgnoreCondition;
30+
options.IgnoreReadOnlyProperties = jsonSerializerBuilder.Options.IgnoreReadOnlyProperties;
31+
options.IgnoreReadOnlyFields = jsonSerializerBuilder.Options.IgnoreReadOnlyFields;
32+
options.IncludeFields = jsonSerializerBuilder.Options.IncludeFields;
33+
options.NumberHandling = jsonSerializerBuilder.Options.NumberHandling;
34+
options.UnknownTypeHandling = jsonSerializerBuilder.Options.UnknownTypeHandling;
35+
options.UnmappedMemberHandling = jsonSerializerBuilder.Options.UnmappedMemberHandling;
36+
options.PreferredObjectCreationHandling = jsonSerializerBuilder.Options.PreferredObjectCreationHandling;
37+
options.RespectNullableAnnotations = jsonSerializerBuilder.Options.RespectNullableAnnotations;
38+
options.RespectRequiredConstructorParameters = jsonSerializerBuilder.Options.RespectRequiredConstructorParameters;
39+
options.ReadCommentHandling = jsonSerializerBuilder.Options.ReadCommentHandling;
40+
options.MaxDepth = jsonSerializerBuilder.Options.MaxDepth;
41+
options.WriteIndented = jsonSerializerBuilder.Options.WriteIndented;
42+
options.IndentCharacter = jsonSerializerBuilder.Options.IndentCharacter;
43+
options.IndentSize = jsonSerializerBuilder.Options.IndentSize;
44+
options.NewLine = jsonSerializerBuilder.Options.NewLine;
45+
options.Encoder = jsonSerializerBuilder.Options.Encoder;
46+
options.DefaultBufferSize = jsonSerializerBuilder.Options.DefaultBufferSize;
47+
options.ReferenceHandler = jsonSerializerBuilder.Options.ReferenceHandler;
48+
49+
foreach (var converter in jsonSerializerBuilder.Options.Converters)
50+
{
51+
options.Converters.Add(converter);
52+
}
53+
54+
options.TypeInfoResolver = jsonSerializerBuilder.Options.TypeInfoResolver;
55+
});
2256

2357
return services;
2458
}

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@
1313
</ItemGroup>
1414

1515
<ItemGroup>
16-
<PackageReference Include="Shuttle.Core.Contract" Version="21.0.1-beta" />
17-
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="10.0.1" />
18-
<PackageReference Include="Microsoft.Extensions.Options" Version="10.0.1" />
16+
<PackageReference Include="Shuttle.Core.Contract" Version="21.0.1-rc3" />
17+
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="10.0.3" />
18+
<PackageReference Include="Microsoft.Extensions.Options" Version="10.0.3" />
1919
</ItemGroup>
2020

2121
<ItemGroup>
@@ -35,7 +35,7 @@
3535

3636
<PropertyGroup>
3737
<Description>Serialization adapter.</Description>
38-
<Version>21.0.1-beta</Version>
38+
<Version>21.0.1-rc3</Version>
3939
<PackageProjectUrl>https://github.com/shuttle/Shuttle.Core.Serialization</PackageProjectUrl>
4040
<RepositoryUrl>https://github.com/shuttle/Shuttle.Core.Serialization.git</RepositoryUrl>
4141
<PackageTags>shuttle serialization</PackageTags>

0 commit comments

Comments
 (0)