Skip to content

Commit 03a8ae8

Browse files
Move from JSON.Net to Sys.Text.Json (#67)
1 parent 9876717 commit 03a8ae8

File tree

8 files changed

+48
-80
lines changed

8 files changed

+48
-80
lines changed

src/CosmosDBSessionStateProviderAsync/Microsoft.AspNet.SessionState.CosmosDBSessionStateProviderAsync.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,9 @@
9191
<PackageReference Include="Microsoft.Azure.Cosmos">
9292
<Version>3.23.0</Version>
9393
</PackageReference>
94+
<PackageReference Include="System.Text.Json">
95+
<Version>7.0.0</Version>
96+
</PackageReference>
9497
</ItemGroup>
9598
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
9699
</Project>

src/CosmosDBSessionStateProviderAsync/Resources/SR.Designer.cs

Lines changed: 0 additions & 18 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/CosmosDBSessionStateProviderAsync/Resources/SR.resx

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -129,12 +129,6 @@
129129
<data name="Invalid_session_state" xml:space="preserve">
130130
<value>The session state information is invalid and might be corrupted.</value>
131131
</data>
132-
<data name="Object_Cannot_Be_Converted_To_SessionStateActions" xml:space="preserve">
133-
<value>Object '{0}' cannot be converted to SessionStateActions</value>
134-
</data>
135-
<data name="Object_Cannot_Be_Converted_To_TimeSpan" xml:space="preserve">
136-
<value>Object '{0}' cannot be converted to TimeSpan</value>
137-
</data>
138132
<data name="Request_To_CosmosDB_Is_Too_Large" xml:space="preserve">
139133
<value>The request rate to CosmosDB is too large. You may consider to increase the offer throughput of the CosmosDB collection or increase maxRetryAttemptsOnThrottledRequests and maxRetryWaitTimeInSeconds settings in web.config</value>
140134
</data>

src/CosmosDBSessionStateProviderAsync/SessionStateActionsConverter.cs

Lines changed: 13 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2,52 +2,42 @@
22
// Licensed under the MIT license. See the License.txt file in the project root for full license information.
33

44
namespace Microsoft.AspNet.SessionState {
5-
using Microsoft.AspNet.SessionState.Resources;
6-
using Newtonsoft.Json;
75
using System;
86
using System.Web.SessionState;
7+
using System.Text.Json;
8+
using System.Text.Json.Serialization;
99

10-
class SessionStateActionsConverter : JsonConverter
10+
class SessionStateActionsConverter : JsonConverter<SessionStateActions?>
1111
{
12-
public override bool CanConvert(Type objectType)
12+
public override bool CanConvert(Type typeToConvert)
1313
{
14-
return typeof(SessionStateActions) == objectType;
14+
return typeof(SessionStateActions?) == typeToConvert;
1515
}
1616

17-
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
17+
public override SessionStateActions? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
1818
{
19-
if(reader.TokenType == JsonToken.Null)
19+
if (reader.TokenType == JsonTokenType.Null)
2020
{
2121
return new Nullable<SessionStateActions>();
2222
}
2323

24-
if (reader.TokenType != JsonToken.Boolean)
24+
if (reader.TokenType != JsonTokenType.True && reader.TokenType != JsonTokenType.False)
2525
{
2626
throw new ArgumentException("reader");
2727
}
2828

29-
return Convert.ToBoolean(reader.Value) ? SessionStateActions.InitializeItem : SessionStateActions.None;
29+
return reader.GetBoolean() ? SessionStateActions.InitializeItem : SessionStateActions.None;
3030
}
3131

32-
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
32+
public override void Write(Utf8JsonWriter writer, SessionStateActions? action, JsonSerializerOptions options)
3333
{
34-
if(value == null)
34+
if (action == null)
3535
{
36-
writer.WriteNull();
36+
writer.WriteNullValue();
3737
return;
3838
}
3939

40-
SessionStateActions action;
41-
if(Enum.TryParse<SessionStateActions>(value.ToString(), out action))
42-
{
43-
var valToWrite = action == SessionStateActions.None ? true : false;
44-
writer.WriteValue(valToWrite);
45-
}
46-
else
47-
{
48-
throw new JsonSerializationException(string.Format(SR.Object_Cannot_Be_Converted_To_SessionStateActions, "value"));
49-
}
40+
writer.WriteBooleanValue((action == SessionStateActions.None));
5041
}
51-
5242
}
5343
}

src/CosmosDBSessionStateProviderAsync/SessionStateItem.cs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,36 +3,37 @@
33

44
namespace Microsoft.AspNet.SessionState
55
{
6-
using Newtonsoft.Json;
76
using System;
87
using System.Web.SessionState;
8+
using System.Text.Json.Serialization;
99

1010
class SessionStateItem
1111
{
12-
[JsonProperty(PropertyName = "id", Required = Required.Always)]
12+
[JsonPropertyName("id")]
13+
[JsonRequired]
1314
public string SessionId { get; set; }
1415

1516
// in second
16-
[JsonProperty(PropertyName = "lockAge", Required = Required.AllowNull)]
17+
[JsonPropertyName("lockAge")]
1718
[JsonConverter(typeof(TimeSpanConverter))]
1819
public TimeSpan? LockAge { get; set; }
1920

20-
[JsonProperty(PropertyName = "lockCookie", Required = Required.AllowNull)]
21+
[JsonPropertyName("lockCookie")]
2122
public int? LockCookie { get; set; }
2223

2324
//in sec
2425
// Leverage CosmosDB's TTL function to remove expired sessionstate item
2526
//ref https://docs.microsoft.com/en-us/azure/cosmos-db/time-to-live
26-
[JsonProperty(PropertyName = "ttl", Required = Required.AllowNull)]
27+
[JsonPropertyName("ttl")]
2728
public int? Timeout { get; set; }
2829

29-
[JsonProperty(PropertyName = "locked", Required = Required.AllowNull)]
30+
[JsonPropertyName("locked")]
3031
public bool? Locked { get; set; }
3132

32-
[JsonProperty(PropertyName = "sessionItem", Required = Required.AllowNull)]
33+
[JsonPropertyName("sessionItem")]
3334
public byte[] SessionItem { get; set; }
3435

35-
[JsonProperty(PropertyName ="uninitialized", Required = Required.AllowNull)]
36+
[JsonPropertyName("uninitialized")]
3637
[JsonConverter(typeof(SessionStateActionsConverter))]
3738
public SessionStateActions? Actions {get;set;}
3839
}

src/CosmosDBSessionStateProviderAsync/TimeSpanConverter.cs

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,48 +4,42 @@
44
namespace Microsoft.AspNet.SessionState
55
{
66
using System;
7-
using Newtonsoft.Json;
7+
using System.Text.Json;
8+
using System.Text.Json.Serialization;
89
using Microsoft.AspNet.SessionState.Resources;
910

10-
class TimeSpanConverter : JsonConverter
11+
class TimeSpanConverter : JsonConverter<TimeSpan?>
1112
{
12-
public override bool CanConvert(Type objectType)
13+
public override bool CanConvert(Type typeToConvert)
1314
{
14-
return typeof(TimeSpan) == objectType;
15+
return typeof(TimeSpan?) == typeToConvert;
1516
}
1617

17-
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
18+
public override TimeSpan? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
1819
{
19-
if(reader.TokenType == JsonToken.Null)
20+
if (reader.TokenType == JsonTokenType.Null)
2021
{
2122
return new Nullable<TimeSpan>();
2223
}
2324

24-
if (reader.TokenType != JsonToken.Integer)
25+
if (reader.TokenType != JsonTokenType.Number)
2526
{
2627
throw new ArgumentException("reader");
2728
}
2829

29-
return new TimeSpan(0, 0, Convert.ToInt32(reader.Value));
30+
return new TimeSpan(0, 0, reader.GetInt32());
3031
}
3132

32-
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
33+
public override void Write(Utf8JsonWriter writer, TimeSpan? value, JsonSerializerOptions options)
3334
{
34-
if(value == null)
35+
if (value == null)
3536
{
36-
writer.WriteNull();
37+
writer.WriteNullValue();
3738
return;
3839
}
3940

4041
var ts = (TimeSpan)value;
41-
if(ts != null)
42-
{
43-
writer.WriteValue((int)ts.TotalSeconds);
44-
}
45-
else
46-
{
47-
throw new JsonSerializationException(string.Format(SR.Object_Cannot_Be_Converted_To_TimeSpan, "value"));
48-
}
42+
writer.WriteNumberValue((int)ts.TotalSeconds);
4943
}
5044
}
5145
}

test/Microsoft.AspNet.SessionState.CosmosDBSessionStateProviderAsync.Test/Microsoft.AspNet.SessionState.CosmosDBSessionStateProviderAsync.Test.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,9 @@
9090
<PackageReference Include="Moq">
9191
<Version>4.7.137</Version>
9292
</PackageReference>
93+
<PackageReference Include="System.Text.Json">
94+
<Version>7.0.0</Version>
95+
</PackageReference>
9396
<PackageReference Include="xunit">
9497
<Version>2.3.1</Version>
9598
</PackageReference>

test/Microsoft.AspNet.SessionState.CosmosDBSessionStateProviderAsync.Test/SessionStateItemTest.cs

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

44
namespace Microsoft.AspNet.SessionState.CosmosDBSessionStateAsyncProvider.Test
55
{
6-
using Newtonsoft.Json;
6+
using System.Text.Json;
7+
using System.Text.Json.Serialization;
78
using System;
89
using System.Web.SessionState;
910
using Xunit;
@@ -26,7 +27,7 @@ public void SessionStateItem_Can_Be_Serialized_With_Null_LockAge()
2627
SessionItem = new byte[2] { 1, 1 },
2728
Timeout = 10
2829
};
29-
var json = JsonConvert.SerializeObject(item);
30+
var json = JsonSerializer.Serialize<SessionStateItem>(item);
3031
var expected = string.Format(JsonTemplate, item.SessionId, "null", item.LockCookie, item.Timeout, item.Locked, "AQE=", true);
3132

3233
Assert.Equal(expected, json, true);
@@ -45,7 +46,7 @@ public void SessionStateItem_Can_Be_Serialized_With_LockAge()
4546
SessionItem = new byte[2] { 1, 1 },
4647
Timeout = 10
4748
};
48-
var json = JsonConvert.SerializeObject(item);
49+
var json = JsonSerializer.Serialize(item);
4950
var expected = string.Format(JsonTemplate, item.SessionId, 60 * 1, item.LockCookie, item.Timeout, item.Locked, "AQE=", false);
5051

5152
Assert.Equal(expected, json, true);
@@ -56,7 +57,7 @@ public void SessionStateItem_Can_Be_Deserialized_With_Null_Uninitialized()
5657
{
5758
var json = string.Format(JsonTemplate, TestSessionId, 60, 1, 20, "false", "AQE=", "null");
5859

59-
var item = JsonConvert.DeserializeObject<SessionStateItem>(json);
60+
var item = JsonSerializer.Deserialize<SessionStateItem>(json);
6061

6162
Assert.Equal(TestSessionId, item.SessionId);
6263
Assert.False(item.Actions.HasValue);
@@ -72,7 +73,7 @@ public void SessionStateItem_Can_Be_Deserialized_With_True_Uninitialized()
7273
{
7374
var json = string.Format(JsonTemplate, TestSessionId, 60, 1, 20, "false", "AQE=", "true");
7475

75-
var item = JsonConvert.DeserializeObject<SessionStateItem>(json);
76+
var item = JsonSerializer.Deserialize<SessionStateItem>(json);
7677

7778
Assert.Equal(TestSessionId, item.SessionId);
7879
Assert.Equal(SessionStateActions.InitializeItem, item.Actions);
@@ -88,7 +89,7 @@ public void SessionStateItem_Can_Be_Deserialized_With_False_Uninitialized_And_Nu
8889
{
8990
var json = string.Format(JsonTemplate, TestSessionId, "null", 1, 10, "true", "AQE=", "false");
9091

91-
var item = JsonConvert.DeserializeObject<SessionStateItem>(json);
92+
var item = JsonSerializer.Deserialize<SessionStateItem>(json);
9293

9394
Assert.Equal(TestSessionId, item.SessionId);
9495
Assert.Equal(SessionStateActions.None, item.Actions);

0 commit comments

Comments
 (0)