diff --git a/Directory.Build.targets b/Directory.Build.targets
index a7d68b99b..9ef4aa5e0 100644
--- a/Directory.Build.targets
+++ b/Directory.Build.targets
@@ -31,6 +31,7 @@
+
diff --git a/src/Storage/Duende.IdentityServer.Storage.csproj b/src/Storage/Duende.IdentityServer.Storage.csproj
index ba7632e43..90cbf5e5b 100644
--- a/src/Storage/Duende.IdentityServer.Storage.csproj
+++ b/src/Storage/Duende.IdentityServer.Storage.csproj
@@ -10,6 +10,7 @@
+
diff --git a/src/Storage/Stores/Serialization/ClaimConverter.cs b/src/Storage/Stores/Serialization/ClaimConverter.cs
index eb85da4ae..48cb2bde0 100644
--- a/src/Storage/Stores/Serialization/ClaimConverter.cs
+++ b/src/Storage/Stores/Serialization/ClaimConverter.cs
@@ -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
{
- 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(reader);
+ var source = JsonSerializer.Deserialize(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);
}
}
}
\ No newline at end of file
diff --git a/src/Storage/Stores/Serialization/ClaimsPrincipalConverter.cs b/src/Storage/Stores/Serialization/ClaimsPrincipalConverter.cs
index 5c0b6f9fa..e1216c230 100644
--- a/src/Storage/Stores/Serialization/ClaimsPrincipalConverter.cs
+++ b/src/Storage/Stores/Serialization/ClaimsPrincipalConverter.cs
@@ -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
{
- 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(reader);
+ var source = JsonSerializer.Deserialize(ref reader, options);
if (source == null) return null;
var claims = source.Claims.Select(x => new Claim(x.Type, x.Value, x.ValueType));
@@ -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);
}
}
}
diff --git a/src/Storage/Stores/Serialization/PersistentGrantSerializer.cs b/src/Storage/Stores/Serialization/PersistentGrantSerializer.cs
index b70c5e36b..ddc368d55 100644
--- a/src/Storage/Stores/Serialization/PersistentGrantSerializer.cs
+++ b/src/Storage/Stores/Serialization/PersistentGrantSerializer.cs
@@ -3,8 +3,8 @@
using Microsoft.AspNetCore.DataProtection;
-using Newtonsoft.Json;
using System;
+using System.Text.Json;
namespace Duende.IdentityServer.Stores.Serialization
{
@@ -25,16 +25,18 @@ public class PersistentGrantOptions
///
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());
@@ -61,7 +63,7 @@ public PersistentGrantSerializer(PersistentGrantOptions options = null, IDataPro
///
public string Serialize(T value)
{
- var payload = JsonConvert.SerializeObject(value, _settings);
+ var payload = JsonSerializer.Serialize(value, _settings);
if (ShouldDataProtect)
{
@@ -75,7 +77,7 @@ public string Serialize(T value)
Payload = payload,
};
- return JsonConvert.SerializeObject(data, _settings);
+ return JsonSerializer.Serialize(data, _settings);
}
///
@@ -86,11 +88,11 @@ public string Serialize(T value)
///
public T Deserialize(string json)
{
- var container = JsonConvert.DeserializeObject(json, _settings);
+ var container = JsonSerializer.Deserialize(json, _settings);
if (container.PersistentGrantDataContainerVersion == 0)
{
- return JsonConvert.DeserializeObject(json, _settings);
+ return JsonSerializer.Deserialize(json, _settings);
}
if (container.PersistentGrantDataContainerVersion == 1)
@@ -107,7 +109,7 @@ public T Deserialize(string json)
payload = _provider.Unprotect(container.Payload);
}
- return JsonConvert.DeserializeObject(payload, _settings);
+ return JsonSerializer.Deserialize(payload, _settings);
}
throw new Exception($"Invalid version in persisted grant data: '{container.PersistentGrantDataContainerVersion}'.");