Skip to content

Commit 3ca0672

Browse files
committed
chore: removes newtonsoft dependency all together
1 parent 863faee commit 3ca0672

File tree

4 files changed

+61
-14
lines changed

4 files changed

+61
-14
lines changed

test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
<PackageReference Include="coverlet.msbuild" Version="6.0.2" PrivateAssets="all" />
1515
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
1616
<PackageReference Include="Moq" Version="4.20.72" />
17-
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
1817
<PackageReference Include="xunit" Version="2.9.2" />
1918
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2" PrivateAssets="all" />
2019
<PackageReference Include="coverlet.collector" Version="6.0.2" PrivateAssets="all" />

test/Microsoft.OpenApi.Readers.Tests/Microsoft.OpenApi.Readers.Tests.csproj

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
<PackageReference Include="coverlet.msbuild" Version="6.0.2" PrivateAssets="all" />
2020
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
2121
<PackageReference Include="FluentAssertions" Version="6.12.2" />
22-
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
2322
<PackageReference Include="SharpYaml" Version="2.1.1" />
2423
<PackageReference Include="xunit" Version="2.9.2" />
2524
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2" PrivateAssets="all" />

test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
<PackageReference Include="FluentAssertions" Version="6.12.2" />
1414
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
1515
<PackageReference Include="Moq" Version="4.20.72" />
16-
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
1716
<PackageReference Include="SharpYaml" Version="2.1.1" />
1817
<PackageReference Include="Verify.Xunit" Version="28.2.1" />
1918
<PackageReference Include="xunit" Version="2.9.2" />

test/Microsoft.OpenApi.Tests/Writers/OpenApiJsonWriterTests.cs

Lines changed: 61 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,14 @@
88
using System.IO;
99
using System.Linq;
1010
using System.Text;
11+
using System.Text.Encodings.Web;
12+
using System.Text.Json;
1113
using System.Text.Json.Nodes;
14+
using System.Text.Json.Serialization;
1215
using FluentAssertions;
1316
using Microsoft.OpenApi.Any;
1417
using Microsoft.OpenApi.Models;
1518
using Microsoft.OpenApi.Writers;
16-
using Newtonsoft.Json;
1719
using Xunit;
1820

1921
namespace Microsoft.OpenApi.Tests.Writers
@@ -62,9 +64,9 @@ public void WriteStringListAsJsonShouldMatchExpected(string[] stringValues, bool
6264
writer.WriteEndArray();
6365
writer.Flush();
6466

65-
var parsedObject = JsonConvert.DeserializeObject(outputString.GetStringBuilder().ToString());
67+
var parsedObject = JsonSerializer.Deserialize<List<string>>(outputString.GetStringBuilder().ToString());
6668
var expectedObject =
67-
JsonConvert.DeserializeObject(JsonConvert.SerializeObject(new List<string>(stringValues)));
69+
JsonSerializer.Deserialize<List<string>>(JsonSerializer.Serialize(new List<string>(stringValues)));
6870

6971
// Assert
7072
parsedObject.Should().BeEquivalentTo(expectedObject);
@@ -222,17 +224,17 @@ private void WriteValueRecursive(OpenApiJsonWriter writer, object value)
222224
public void WriteMapAsJsonShouldMatchExpected(IDictionary<string, object> inputMap, bool produceTerseOutput)
223225
{
224226
// Arrange
225-
var outputString = new StringWriter(CultureInfo.InvariantCulture);
227+
using var outputString = new StringWriter(CultureInfo.InvariantCulture);
226228
var writer = new OpenApiJsonWriter(outputString, new() { Terse = produceTerseOutput });
227229

228230
// Act
229231
WriteValueRecursive(writer, inputMap);
230232

231-
var parsedObject = JsonConvert.DeserializeObject(outputString.GetStringBuilder().ToString());
232-
var expectedObject = JsonConvert.DeserializeObject(JsonConvert.SerializeObject(inputMap));
233+
using var parsedObject = JsonDocument.Parse(outputString.GetStringBuilder().ToString());
234+
using var expectedObject = JsonDocument.Parse(JsonSerializer.Serialize(inputMap, _jsonSerializerOptions.Value));
233235

234236
// Assert
235-
parsedObject.Should().BeEquivalentTo(expectedObject);
237+
Assert.True(JsonElement.DeepEquals(parsedObject.RootElement, expectedObject.RootElement));
236238
}
237239

238240
public static IEnumerable<object[]> WriteDateTimeAsJsonTestCases()
@@ -248,6 +250,57 @@ from shouldBeTerse in shouldProduceTerseOutputValues
248250
select new object[] { input, shouldBeTerse };
249251
}
250252

253+
public class CustomDateTimeOffsetConverter : JsonConverter<DateTimeOffset>
254+
{
255+
public CustomDateTimeOffsetConverter(string format)
256+
{
257+
ArgumentException.ThrowIfNullOrEmpty(format);
258+
Format = format;
259+
}
260+
261+
public string Format { get; }
262+
263+
public override DateTimeOffset Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
264+
{
265+
return DateTime.ParseExact(reader.GetString(), Format, CultureInfo.InvariantCulture);
266+
}
267+
268+
public override void Write(Utf8JsonWriter writer, DateTimeOffset value, JsonSerializerOptions options)
269+
{
270+
writer.WriteStringValue(value.ToString(Format));
271+
}
272+
}
273+
public class CustomDateTimeConverter : JsonConverter<DateTime>
274+
{
275+
public CustomDateTimeConverter(string format)
276+
{
277+
ArgumentException.ThrowIfNullOrEmpty(format);
278+
Format = format;
279+
}
280+
281+
public string Format { get; }
282+
283+
public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
284+
{
285+
return DateTime.ParseExact(reader.GetString(), Format, CultureInfo.InvariantCulture);
286+
}
287+
288+
public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options)
289+
{
290+
writer.WriteStringValue(value.ToString(Format));
291+
}
292+
}
293+
private static readonly Lazy<JsonSerializerOptions> _jsonSerializerOptions = new(() =>
294+
{
295+
var options = new JsonSerializerOptions
296+
{
297+
Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping
298+
};
299+
options.Converters.Add(new CustomDateTimeOffsetConverter("yyyy-MM-ddTHH:mm:ss.fffffffK"));
300+
options.Converters.Add(new CustomDateTimeConverter("yyyy-MM-ddTHH:mm:ss.fffffffK"));
301+
return options;
302+
});
303+
251304
[Theory]
252305
[MemberData(nameof(WriteDateTimeAsJsonTestCases))]
253306
public void WriteDateTimeAsJsonShouldMatchExpected(DateTimeOffset dateTimeOffset, bool produceTerseOutput)
@@ -260,10 +313,7 @@ public void WriteDateTimeAsJsonShouldMatchExpected(DateTimeOffset dateTimeOffset
260313
writer.WriteValue(dateTimeOffset);
261314

262315
var writtenString = outputString.GetStringBuilder().ToString();
263-
var expectedString = JsonConvert.SerializeObject(dateTimeOffset, new JsonSerializerSettings
264-
{
265-
DateFormatString = "yyyy-MM-ddTHH:mm:ss.fffffffK",
266-
});
316+
var expectedString = JsonSerializer.Serialize(dateTimeOffset, _jsonSerializerOptions.Value);
267317

268318
// Assert
269319
writtenString.Should().Be(expectedString);

0 commit comments

Comments
 (0)