Skip to content

Commit 2a649ae

Browse files
V2 Update.
1 parent e1759cf commit 2a649ae

File tree

12 files changed

+71
-87
lines changed

12 files changed

+71
-87
lines changed

Open.Serialization.Json.Newtonsoft/Extensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public static IJsonSerializer GetSerializer(this JsonSerializerSettings settings
2222
=> new JsonSerializerInternal(settings);
2323

2424
public static IJsonSerializer<T> GetSerializer<T>(this JsonSerializerSettings settings)
25-
=> new JsonSerializerInternal<T>(settings);
25+
=> new JsonSerializerInternal(settings).Cast<T>();
2626

2727
public static IJsonSerializerFactory GetSerializerFactory(this JsonSerializerSettings settings)
2828
=> new JsonSerializerFactory(settings);

Open.Serialization.Json.Newtonsoft/JsonSerializerFactory.cs

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
namespace Open.Serialization.Json.Newtonsoft
77
{
8-
public class JsonSerializerFactory : JsonSerializerFactoryBase
8+
public class JsonSerializerFactory : IJsonSerializerFactory, IJsonObjectSerializerFactory
99
{
1010
static readonly JsonSerializerSettings DefaultOptions = RelaxedJson.Options();
1111
readonly JsonSerializerSettings _settings;
@@ -15,16 +15,17 @@ public JsonSerializerFactory(JsonSerializerSettings? defaultOptions = null)
1515
}
1616

1717
JsonSerializerInternal? _default;
18-
#pragma warning disable CS8603 // Possible null reference return.
19-
JsonSerializerInternal Default => LazyInitializer.EnsureInitialized(ref _default, () => new JsonSerializerInternal(_settings));
20-
#pragma warning restore CS8603 // Possible null reference return.
18+
JsonSerializerInternal Default => LazyInitializer.EnsureInitialized(ref _default, () => new JsonSerializerInternal(_settings))!;
2119

22-
public override IJsonSerializer GetSerializer(IJsonSerializationOptions? options = null, bool caseSensitive = false)
20+
#if NETSTANDARD2_1
21+
[return: System.Diagnostics.CodeAnalysis.NotNullIfNotNull("options")]
22+
#endif
23+
public JsonSerializerSettings? GetJsonSerializerSettings(IJsonSerializationOptions? options = null, bool caseSensitive = false)
2324
{
2425
if (caseSensitive)
2526
throw new NotSupportedException("Newtonsoft does not support case-sensitive deserialization.");
2627

27-
if (options == null) return Default;
28+
if (options == null) return null;
2829

2930
if (options.CamelCaseKeys == true && options.CamelCaseProperties != true)
3031
throw new NotSupportedException("Camel casing keys but not properties is not supported.");
@@ -55,7 +56,19 @@ public override IJsonSerializer GetSerializer(IJsonSerializationOptions? options
5556
if (options.Indent.HasValue)
5657
o.Formatting = options.Indent.Value ? Formatting.Indented : Formatting.None;
5758

58-
return new JsonSerializerInternal(o);
59+
return o;
60+
}
61+
62+
public IJsonSerializer GetSerializer(IJsonSerializationOptions? options = null, bool caseSensitive = false)
63+
{
64+
var o = GetJsonSerializerSettings(options, caseSensitive);
65+
return o == null ? Default : new JsonSerializerInternal(o);
66+
}
67+
68+
public IJsonObjectSerializer GetObjectSerializer(IJsonSerializationOptions? options, bool caseSensitive)
69+
{
70+
var o = GetJsonSerializerSettings(options, caseSensitive);
71+
return o == null ? Default : new JsonSerializerInternal(o);
5972
}
6073
}
6174
}
Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
using Newtonsoft.Json;
2+
using System;
23

34
namespace Open.Serialization.Json.Newtonsoft
45
{
5-
internal class JsonSerializerInternal : JsonSerializerBase
6+
internal class JsonSerializerInternal : JsonObjectSerializerBase, IJsonSerializer
67
{
78
readonly JsonSerializerSettings _settings;
89
internal JsonSerializerInternal(JsonSerializerSettings settings)
@@ -15,13 +16,15 @@ public override T Deserialize<T>(string? value)
1516

1617
public override string? Serialize<T>(T item)
1718
=> JsonConvert.SerializeObject(item, _settings);
18-
}
1919

20-
internal class JsonSerializerInternal<T> : JsonSerializer<T>, IJsonSerializer<T>, IJsonAsyncSerializer<T>
21-
{
22-
internal JsonSerializerInternal(JsonSerializerSettings settings)
23-
: base(settings.GetDeserialize<T>(), settings.GetSerialize<T>())
24-
{
25-
}
20+
public override object? Deserialize(string? value, Type type)
21+
=> JsonConvert.DeserializeObject(value, type);
22+
23+
public override string? Serialize(object? item, Type type)
24+
=> JsonConvert.SerializeObject(item, type, _settings);
25+
26+
public new JsonSerializer<T> Cast<T>()
27+
=> new JsonSerializer<T>(Deserialize<T>, Serialize, DeserializeAsync<T>, SerializeAsync);
28+
2629
}
2730
}

Open.Serialization.Json.Newtonsoft/Open.Serialization.Json.Newtonsoft.csproj

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,9 @@
1717
<RepositoryUrl>https://github.com/electricessence/Open.Serialization</RepositoryUrl>
1818
<RepositoryType>git</RepositoryType>
1919
<PackageTags>serialization json newtonsoft</PackageTags>
20-
<Version>1.4.0</Version>
20+
<Version>2.1.0</Version>
2121
<Nullable>enable</Nullable>
22+
<UserSecretsId>b94b742e-c131-4bbd-8429-461b51eec976</UserSecretsId>
2223
</PropertyGroup>
2324

2425
<ItemGroup>
@@ -27,7 +28,7 @@
2728
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
2829
</PackageReference>
2930
<PackageReference Include="Newtonsoft.Json" Version="11.0.1" />
30-
<PackageReference Include="Open.Serialization.Json" Version="1.4.0" />
31+
<PackageReference Include="Open.Serialization.Json" Version="2.1.1" />
3132
</ItemGroup>
3233

3334
</Project>

Open.Serialization.Json.System/Extensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public static IJsonSerializer GetSerializer(this JsonSerializerOptions options)
2323
=> new JsonSerializerInternal(options);
2424

2525
public static IJsonSerializer<T> GetSerializer<T>(this JsonSerializerOptions options)
26-
=> new JsonSerializerInternal<T>(options);
26+
=> new JsonSerializerInternal(options).Cast<T>();
2727

2828
public static IJsonSerializerFactory GetSerializerFactory(this JsonSerializerOptions options)
2929
=> new JsonSerializerFactory(options);

Open.Serialization.Json.System/JsonSerializerFactory.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
namespace Open.Serialization.Json.System
55
{
6-
public class JsonSerializerFactory : JsonSerializerFactoryBase
6+
public class JsonSerializerFactory : IJsonSerializerFactory
77
{
88
static readonly JsonSerializerOptions DefaultOptions = RelaxedJson.Options();
99
readonly JsonSerializerOptions _options;
@@ -15,7 +15,7 @@ public JsonSerializerFactory(JsonSerializerOptions? defaultOptions = null)
1515
JsonSerializerInternal? _caseSensitive;
1616
JsonSerializerInternal? _ignoreCase;
1717

18-
public override IJsonSerializer GetSerializer(IJsonSerializationOptions? options = null, bool caseSensitive = false)
18+
public IJsonSerializer GetSerializer(IJsonSerializationOptions? options = null, bool caseSensitive = false)
1919
{
2020
if (options == null)
2121
{

Open.Serialization.Json.System/JsonSerializerInternal.cs

Lines changed: 4 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -17,41 +17,17 @@ internal JsonSerializerInternal(JsonSerializerOptions options)
1717
public override T Deserialize<T>(string? value)
1818
=> JsonSerializer.Deserialize<T>(value, _options);
1919

20+
ValueTask ISerializeAsync.SerializeAsync<T>(Stream stream, T item, CancellationToken cancellationToken)
21+
=> new ValueTask(JsonSerializer.SerializeAsync(stream, item, _options, cancellationToken));
22+
2023
public new Task SerializeAsync<T>(Stream stream, T item, CancellationToken cancellationToken = default)
2124
=> JsonSerializer.SerializeAsync(stream, item, _options, cancellationToken);
2225

23-
ValueTask ISerializeAsync.SerializeAsync<T>(Stream stream, T item, CancellationToken cancellationToken)
24-
=> new ValueTask(SerializeAsync(stream, item, cancellationToken));
25-
2626
public override string? Serialize<T>(T item)
2727
=> JsonSerializer.Serialize(item, _options);
2828

2929
public override ValueTask<T> DeserializeAsync<T>(Stream stream, CancellationToken cancellationToken = default)
3030
=> JsonSerializer.DeserializeAsync<T>(stream, _options);
31-
}
32-
33-
34-
internal class JsonSerializerInternal<T> : JsonSerializerBase<T>, IJsonSerializer<T>
35-
{
36-
readonly JsonSerializerOptions _options;
37-
internal JsonSerializerInternal(JsonSerializerOptions options)
38-
{
39-
_options = options ?? throw new ArgumentNullException(nameof(options));
40-
}
41-
42-
public override T Deserialize(string? value)
43-
=> JsonSerializer.Deserialize<T>(value, _options);
44-
45-
public new Task SerializeAsync(Stream stream, T item, CancellationToken cancellationToken = default)
46-
=> JsonSerializer.SerializeAsync(stream, item, _options, cancellationToken);
47-
48-
ValueTask ISerializeAsync<T>.SerializeAsync(Stream stream, T item, CancellationToken cancellationToken)
49-
=> new ValueTask(SerializeAsync(stream, item, cancellationToken));
50-
51-
public override string? Serialize(T item)
52-
=> JsonSerializer.Serialize(item, _options);
53-
54-
public override ValueTask<T> DeserializeAsync(Stream stream, CancellationToken cancellationToken = default)
55-
=> JsonSerializer.DeserializeAsync<T>(stream, _options);
31+
5632
}
5733
}

Open.Serialization.Json.System/Open.Serialization.Json.System.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ Part of the "Open" set of libraries.
1717
<RepositoryUrl>https://github.com/electricessence/Open.Serialization</RepositoryUrl>
1818
<RepositoryType>git</RepositoryType>
1919
<PackageTags>serialization json stj</PackageTags>
20-
<Version>1.4.0</Version>
20+
<Version>2.1.0</Version>
2121

2222
<Nullable>enable</Nullable>
2323
</PropertyGroup>
@@ -27,8 +27,8 @@ Part of the "Open" set of libraries.
2727
<PrivateAssets>all</PrivateAssets>
2828
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
2929
</PackageReference>
30-
<PackageReference Include="Open.Serialization.Json" Version="1.4.0" />
31-
<PackageReference Include="System.Text.Json" Version="4.6.0" />
30+
<PackageReference Include="Open.Serialization.Json" Version="2.1.1" />
31+
<PackageReference Include="System.Text.Json" Version="4.7.0" />
3232
</ItemGroup>
3333

3434
</Project>

Open.Serialization.Json.Utf8Json/Extensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public static IJsonSerializer GetSerializer(this IJsonFormatterResolver options,
2626
=> new JsonSerializerInternal(options, indent);
2727

2828
public static IJsonSerializer<T> GetSerializer<T>(this IJsonFormatterResolver options, bool indent = false)
29-
=> new JsonSerializerInternal<T>(options, indent);
29+
=> new JsonSerializerInternal(options, indent).Cast<T>();
3030

3131
public static IJsonSerializerFactory GetSerializerFactory(this IJsonFormatterResolver options)
3232
=> new JsonSerializerFactory(options);

Open.Serialization.Json.Utf8Json/JsonSerializerFactory.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
namespace Open.Serialization.Json.Utf8Json
77
{
8-
public class JsonSerializerFactory : JsonSerializerFactoryBase
8+
public class JsonSerializerFactory : IJsonSerializerFactory
99
{
1010
readonly IJsonFormatterResolver _resolver;
1111
readonly bool _indent;
@@ -20,7 +20,7 @@ public JsonSerializerFactory(IJsonFormatterResolver? defaultResolver = null, boo
2020
JsonSerializerInternal? _default;
2121
JsonSerializerInternal Default => LazyInitializer.EnsureInitialized(ref _default, () => new JsonSerializerInternal(_resolver, _indent))!;
2222

23-
public override IJsonSerializer GetSerializer(IJsonSerializationOptions? options = null, bool caseSensitive = false)
23+
public IJsonSerializer GetSerializer(IJsonSerializationOptions? options = null, bool caseSensitive = false)
2424
{
2525
if (caseSensitive)
2626
throw new NotSupportedException("Utf8Json does not support case-sensitive deserialization.");

0 commit comments

Comments
 (0)