-
-
Notifications
You must be signed in to change notification settings - Fork 11
Expand file tree
/
Copy pathJsonBenchmarks.System.Text.Json-SrcGen.cs
More file actions
33 lines (29 loc) · 1.3 KB
/
JsonBenchmarks.System.Text.Json-SrcGen.cs
File metadata and controls
33 lines (29 loc) · 1.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
using System.Text.Json;
using System.Text.Json.Serialization;
using BenchmarkDotNet.Attributes;
using SerializationBenchmarks.Models;
public partial class JsonBenchmark
{
[Benchmark, BenchmarkCategory("Serialization", "Json"), ArgumentsSource(nameof(GenerateDataSets))]
public string SystemTextJson_SrcGen_Serialize(DataSet data)
{
return System.Text.Json.JsonSerializer.Serialize(data.Payload, DatasetSerializerContext.Benchmark.ListUser);
}
[Benchmark, BenchmarkCategory("Deserialization", "Json"), ArgumentsSource(nameof(GenerateDataSets))]
public List<User> SystemTextJson_SrcGen_Deserialize(DataSet data)
{
return System.Text.Json.JsonSerializer.Deserialize<List<User>>(data.Json, DatasetSerializerContext.Benchmark.ListUser);
}
}
[JsonSourceGenerationOptions(PropertyNamingPolicy = JsonKnownNamingPolicy.CamelCase)]
[JsonSerializable(typeof(List<User>))]
public partial class DatasetSerializerContext : JsonSerializerContext
{
internal static DatasetSerializerContext Benchmark { get; }
static DatasetSerializerContext()
{
var options = new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase };
options.Converters.Add(new JsonStringEnumConverter());
Benchmark = new DatasetSerializerContext(options);
}
}