Skip to content

Commit

Permalink
use msft json serializer (away from newtonsoft)
Browse files Browse the repository at this point in the history
  • Loading branch information
brockallen committed Dec 21, 2020
1 parent 0e21a06 commit de00fee
Show file tree
Hide file tree
Showing 5 changed files with 33 additions and 41 deletions.
1 change: 1 addition & 0 deletions Directory.Build.targets
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
<PackageReference Update="xunit.runner.visualstudio" Version="2.4.3" PrivateAssets="All" />

<!--microsoft extensions -->
<PackageReference Update="System.Text.Json" Version="5.0.0" />
<PackageReference Update="Microsoft.Extensions.Caching.Memory" Version="$(ExtensionsVersion)" />
<PackageReference Update="Microsoft.Extensions.Http" Version="$(ExtensionsVersion)" />
<PackageReference Update="Microsoft.Extensions.Http.Polly" Version="$(ExtensionsVersion)" />
Expand Down
1 change: 1 addition & 0 deletions src/Storage/Duende.IdentityServer.Storage.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@

<ItemGroup>
<PackageReference Include="IdentityModel" />
<PackageReference Include="System.Text.Json" />
<PackageReference Include="Microsoft.AspNetCore.DataProtection.Abstractions" />
</ItemGroup>

Expand Down
28 changes: 11 additions & 17 deletions src/Storage/Stores/Serialization/ClaimConverter.cs
Original file line number Diff line number Diff line change
@@ -1,41 +1,35 @@
// Copyright (c) Duende Software. All rights reserved.
// Copyright (c) Duende Software. All rights reserved.
// See LICENSE in the project root for license information.


using Newtonsoft.Json;
using System;
using System.Security.Claims;
using System.Text.Json;
using System.Text.Json.Serialization;

#pragma warning disable 1591

namespace Duende.IdentityServer.Stores.Serialization
{
public class ClaimConverter : JsonConverter
public class ClaimConverter : JsonConverter<Claim>
{
public override bool CanConvert(Type objectType)
public override Claim Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
return typeof(Claim) == objectType;
}

public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
var source = serializer.Deserialize<ClaimLite>(reader);
var source = JsonSerializer.Deserialize<ClaimLite>(ref reader, options);
var target = new Claim(source.Type, source.Value, source.ValueType);
return target;
}

public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
public override void Write(Utf8JsonWriter writer, Claim value, JsonSerializerOptions options)
{
var source = (Claim)value;

var target = new ClaimLite
{
Type = source.Type,
Value = source.Value,
ValueType = source.ValueType
Type = value.Type,
Value = value.Value,
ValueType = value.ValueType
};

serializer.Serialize(writer, target);
JsonSerializer.Serialize(writer, target, options);
}
}
}
24 changes: 9 additions & 15 deletions src/Storage/Stores/Serialization/ClaimsPrincipalConverter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,25 +3,21 @@


using IdentityModel;
using Newtonsoft.Json;
using System;
using System.Linq;
using System.Security.Claims;
using System.Text.Json;
using System.Text.Json.Serialization;

#pragma warning disable 1591

namespace Duende.IdentityServer.Stores.Serialization
{
public class ClaimsPrincipalConverter : JsonConverter
public class ClaimsPrincipalConverter : JsonConverter<ClaimsPrincipal>
{
public override bool CanConvert(Type objectType)
public override ClaimsPrincipal Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
return typeof(ClaimsPrincipal) == objectType;
}

public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
var source = serializer.Deserialize<ClaimsPrincipalLite>(reader);
var source = JsonSerializer.Deserialize<ClaimsPrincipalLite>(ref reader, options);
if (source == null) return null;

var claims = source.Claims.Select(x => new Claim(x.Type, x.Value, x.ValueType));
Expand All @@ -30,16 +26,14 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist
return target;
}

public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
public override void Write(Utf8JsonWriter writer, ClaimsPrincipal value, JsonSerializerOptions options)
{
var source = (ClaimsPrincipal)value;

var target = new ClaimsPrincipalLite
{
AuthenticationType = source.Identity.AuthenticationType,
Claims = source.Claims.Select(x => new ClaimLite { Type = x.Type, Value = x.Value, ValueType = x.ValueType }).ToArray()
AuthenticationType = value.Identity.AuthenticationType,
Claims = value.Claims.Select(x => new ClaimLite { Type = x.Type, Value = x.Value, ValueType = x.ValueType }).ToArray()
};
serializer.Serialize(writer, target);
JsonSerializer.Serialize(writer, target, options);
}
}
}
20 changes: 11 additions & 9 deletions src/Storage/Stores/Serialization/PersistentGrantSerializer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@


using Microsoft.AspNetCore.DataProtection;
using Newtonsoft.Json;
using System;
using System.Text.Json;

namespace Duende.IdentityServer.Stores.Serialization
{
Expand All @@ -25,16 +25,18 @@ public class PersistentGrantOptions
/// <seealso cref="IPersistentGrantSerializer" />
public class PersistentGrantSerializer : IPersistentGrantSerializer
{
private static readonly JsonSerializerSettings _settings;
private static readonly JsonSerializerOptions _settings;

private readonly PersistentGrantOptions _options;
private readonly IDataProtector _provider;

static PersistentGrantSerializer()
{
_settings = new JsonSerializerSettings
_settings = new JsonSerializerOptions
{
ContractResolver = new CustomContractResolver()
IgnoreReadOnlyFields = true,
IgnoreReadOnlyProperties = true,

};
_settings.Converters.Add(new ClaimConverter());
_settings.Converters.Add(new ClaimsPrincipalConverter());
Expand All @@ -61,7 +63,7 @@ public PersistentGrantSerializer(PersistentGrantOptions options = null, IDataPro
/// <returns></returns>
public string Serialize<T>(T value)
{
var payload = JsonConvert.SerializeObject(value, _settings);
var payload = JsonSerializer.Serialize(value, _settings);

if (ShouldDataProtect)
{
Expand All @@ -75,7 +77,7 @@ public string Serialize<T>(T value)
Payload = payload,
};

return JsonConvert.SerializeObject(data, _settings);
return JsonSerializer.Serialize(data, _settings);
}

/// <summary>
Expand All @@ -86,11 +88,11 @@ public string Serialize<T>(T value)
/// <returns></returns>
public T Deserialize<T>(string json)
{
var container = JsonConvert.DeserializeObject<PersistentGrantDataContainer>(json, _settings);
var container = JsonSerializer.Deserialize<PersistentGrantDataContainer>(json, _settings);

if (container.PersistentGrantDataContainerVersion == 0)
{
return JsonConvert.DeserializeObject<T>(json, _settings);
return JsonSerializer.Deserialize<T>(json, _settings);
}

if (container.PersistentGrantDataContainerVersion == 1)
Expand All @@ -107,7 +109,7 @@ public T Deserialize<T>(string json)
payload = _provider.Unprotect(container.Payload);
}

return JsonConvert.DeserializeObject<T>(payload, _settings);
return JsonSerializer.Deserialize<T>(payload, _settings);
}

throw new Exception($"Invalid version in persisted grant data: '{container.PersistentGrantDataContainerVersion}'.");
Expand Down

0 comments on commit de00fee

Please sign in to comment.