Skip to content

Commit fe9e77d

Browse files
committed
EDITSKS-5515: impl long to string converter (separate from long? to string)
1 parent 4a39ed0 commit fe9e77d

File tree

5 files changed

+52
-28
lines changed

5 files changed

+52
-28
lines changed

Cassandra.DistributedTaskQueue.Monitoring.TestService/Startup.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public class Startup
1212
{
1313
public void ConfigureServices(IServiceCollection services)
1414
{
15+
services.AddControllers().AddJsonOptions(options => options.JsonSerializerOptions.Converters.Add(new NullableLongToStringConverter()));
1516
services.AddControllers().AddJsonOptions(options => options.JsonSerializerOptions.Converters.Add(new LongToStringConverter()));
1617
services.AddSingleton<IControllerFactory>(new GroboControllerFactory());
1718
}

Cassandra.DistributedTaskQueue.Monitoring/Api/RtqMonitoringTaskMeta.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,27 +26,27 @@ public class RtqMonitoringTaskMeta
2626
public long MinimalStartTicks { get; set; }
2727

2828
[JsonPropertyName("startExecutingTicks")]
29-
[JsonConverter(typeof(LongToStringConverter))]
29+
[JsonConverter(typeof(NullableLongToStringConverter))]
3030
public long? StartExecutingTicks { get; set; }
3131

3232
[JsonPropertyName("finishExecutingTicks")]
33-
[JsonConverter(typeof(LongToStringConverter))]
33+
[JsonConverter(typeof(NullableLongToStringConverter))]
3434
public long? FinishExecutingTicks { get; set; }
3535

3636
[JsonPropertyName("lastModificationTicks")]
37-
[JsonConverter(typeof(LongToStringConverter))]
37+
[JsonConverter(typeof(NullableLongToStringConverter))]
3838
public long? LastModificationTicks { get; set; }
3939

4040
[JsonPropertyName("expirationTimestampTicks")]
41-
[JsonConverter(typeof(LongToStringConverter))]
41+
[JsonConverter(typeof(NullableLongToStringConverter))]
4242
public long? ExpirationTimestampTicks { get; set; }
4343

4444
[JsonPropertyName("expirationModificationTicks")]
45-
[JsonConverter(typeof(LongToStringConverter))]
45+
[JsonConverter(typeof(NullableLongToStringConverter))]
4646
public long? ExpirationModificationTicks { get; set; }
4747

4848
[JsonPropertyName("executionDurationTicks")]
49-
[JsonConverter(typeof(LongToStringConverter))]
49+
[JsonConverter(typeof(NullableLongToStringConverter))]
5050
public long? ExecutionDurationTicks { get; set; }
5151

5252
[JsonPropertyName("state")]
Lines changed: 8 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,23 @@
1-
#nullable enable
2-
3-
using System;
1+
using System;
42
using System.Text.Json;
53
using System.Text.Json.Serialization;
64

75
namespace SkbKontur.Cassandra.DistributedTaskQueue.Monitoring.Json;
86

97
/// <summary>
10-
/// Конвертер, которые сериализует long в строки вместо чисел,
11-
/// ибо JSON.parse() на длинных long-ах теряет последние разряды
8+
/// Конвертор для сериализации long в строку
9+
/// note: JSON.parse() при сериализации длинных чисел теряет последние разряды
1210
/// </summary>
13-
public class LongToStringConverter : JsonConverter<long?>
11+
public class LongToStringConverter : JsonConverter<long>
1412
{
15-
public override long? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
13+
public override long Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
1614
{
17-
var value = JsonSerializer.Deserialize<string?>(ref reader);
18-
if (value == null)
19-
{
20-
return null;
21-
}
15+
var value = JsonSerializer.Deserialize<string>(ref reader);
2216
return long.Parse(value);
2317
}
2418

25-
public override void Write(Utf8JsonWriter writer, long? value, JsonSerializerOptions options)
19+
public override void Write(Utf8JsonWriter writer, long value, JsonSerializerOptions options)
2620
{
27-
if (value == null)
28-
{
29-
writer.WriteNullValue();
30-
}
31-
else
32-
{
33-
writer.WriteStringValue(value.ToString());
34-
}
21+
writer.WriteStringValue(value.ToString());
3522
}
3623
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
#nullable enable
2+
3+
using System;
4+
using System.Text.Json;
5+
using System.Text.Json.Serialization;
6+
7+
namespace SkbKontur.Cassandra.DistributedTaskQueue.Monitoring.Json;
8+
9+
/// <summary>
10+
/// Конвертор для сериализации long? в строку
11+
/// note: JSON.parse() при сериализации длинных чисел теряет последние разряды
12+
/// </summary>
13+
public class NullableLongToStringConverter : JsonConverter<long?>
14+
{
15+
public override long? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
16+
{
17+
var value = JsonSerializer.Deserialize<string?>(ref reader);
18+
if (value == null)
19+
{
20+
return null;
21+
}
22+
return long.Parse(value);
23+
}
24+
25+
public override void Write(Utf8JsonWriter writer, long? value, JsonSerializerOptions options)
26+
{
27+
if (value == null)
28+
{
29+
writer.WriteNullValue();
30+
}
31+
else
32+
{
33+
writer.WriteStringValue(value.ToString());
34+
}
35+
}
36+
}

version.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"version": "3.4-prerelease3",
2+
"version": "3.4",
33
"assemblyVersion": {
44
"precision": "build"
55
},

0 commit comments

Comments
 (0)