1
1
using System ;
2
2
using System . Collections . Generic ;
3
3
using System . Text ;
4
- using Newtonsoft . Json ;
5
- using Newtonsoft . Json . Converters ;
6
- using Newtonsoft . Json . Serialization ;
4
+ using System . Text . Json ;
5
+ using System . Text . Json . Serialization ;
7
6
8
7
namespace GitCredentialManager ;
9
8
@@ -13,28 +12,38 @@ public abstract class Trace2Message
13
12
private const string NormalPerfTimeFormat = "HH:mm:ss.ffffff" ;
14
13
15
14
protected const string EmptyPerformanceSpan = "| | | | " ;
16
- protected const string TimeFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'ffffff'Z'" ;
15
+ protected static readonly JsonSerializerOptions JsonSerializerOptions = new ( )
16
+ {
17
+ PropertyNameCaseInsensitive = true ,
18
+ Converters = { new JsonStringEnumConverter ( new SnakeCaseNamingPolicy ( ) ) }
19
+ } ;
17
20
18
- [ JsonProperty ( "event" ) ]
21
+ [ JsonPropertyName ( "event" ) ]
22
+ [ JsonPropertyOrder ( 1 ) ]
19
23
public Trace2Event Event { get ; set ; }
20
24
21
- [ JsonProperty ( "sid" ) ]
25
+ [ JsonPropertyName ( "sid" ) ]
26
+ [ JsonPropertyOrder ( 2 ) ]
22
27
public string Sid { get ; set ; }
23
28
24
- [ JsonProperty ( "thread" ) ]
29
+ [ JsonPropertyName ( "thread" ) ]
30
+ [ JsonPropertyOrder ( 3 ) ]
25
31
public string Thread { get ; set ; }
26
32
27
- [ JsonProperty ( "time" ) ]
33
+ [ JsonPropertyName ( "time" ) ]
34
+ [ JsonPropertyOrder ( 4 ) ]
28
35
public DateTimeOffset Time { get ; set ; }
29
36
30
- [ JsonProperty ( "file" ) ]
31
-
37
+ [ JsonPropertyName ( "file" ) ]
38
+ [ JsonPropertyOrder ( 5 ) ]
32
39
public string File { get ; set ; }
33
40
34
- [ JsonProperty ( "line" ) ]
41
+ [ JsonPropertyName ( "line" ) ]
42
+ [ JsonPropertyOrder ( 6 ) ]
35
43
public int Line { get ; set ; }
36
44
37
- [ JsonProperty ( "depth" ) ]
45
+ [ JsonPropertyName ( "depth" ) ]
46
+ [ JsonPropertyOrder ( 7 ) ]
38
47
public int Depth { get ; set ; }
39
48
40
49
public abstract string ToJson ( ) ;
@@ -175,20 +184,17 @@ private static string BuildSpan(PerformanceFormatSpan component, string data)
175
184
176
185
public class VersionMessage : Trace2Message
177
186
{
178
- [ JsonProperty ( "evt" ) ]
187
+ [ JsonPropertyName ( "evt" ) ]
188
+ [ JsonPropertyOrder ( 8 ) ]
179
189
public string Evt { get ; set ; }
180
190
181
- [ JsonProperty ( "exe" ) ]
191
+ [ JsonPropertyName ( "exe" ) ]
192
+ [ JsonPropertyOrder ( 9 ) ]
182
193
public string Exe { get ; set ; }
183
194
184
195
public override string ToJson ( )
185
196
{
186
- return JsonConvert . SerializeObject ( this ,
187
- new StringEnumConverter ( typeof ( SnakeCaseNamingStrategy ) ) ,
188
- new IsoDateTimeConverter ( )
189
- {
190
- DateTimeFormat = TimeFormat
191
- } ) ;
197
+ return JsonSerializer . Serialize ( this , JsonSerializerOptions ) ;
192
198
}
193
199
194
200
public override string ToNormalString ( )
@@ -214,20 +220,17 @@ protected override string GetEventMessage(Trace2FormatTarget formatTarget)
214
220
215
221
public class StartMessage : Trace2Message
216
222
{
217
- [ JsonProperty ( "t_abs" ) ]
223
+ [ JsonPropertyName ( "t_abs" ) ]
224
+ [ JsonPropertyOrder ( 8 ) ]
218
225
public double ElapsedTime { get ; set ; }
219
226
220
- [ JsonProperty ( "argv" ) ]
227
+ [ JsonPropertyName ( "argv" ) ]
228
+ [ JsonPropertyOrder ( 9 ) ]
221
229
public List < string > Argv { get ; set ; }
222
230
223
231
public override string ToJson ( )
224
232
{
225
- return JsonConvert . SerializeObject ( this ,
226
- new StringEnumConverter ( typeof ( SnakeCaseNamingStrategy ) ) ,
227
- new IsoDateTimeConverter ( )
228
- {
229
- DateTimeFormat = TimeFormat
230
- } ) ;
233
+ return JsonSerializer . Serialize ( this , JsonSerializerOptions ) ;
231
234
}
232
235
233
236
public override string ToNormalString ( )
@@ -253,20 +256,17 @@ protected override string GetEventMessage(Trace2FormatTarget formatTarget)
253
256
254
257
public class ExitMessage : Trace2Message
255
258
{
256
- [ JsonProperty ( "t_abs" ) ]
259
+ [ JsonPropertyName ( "t_abs" ) ]
260
+ [ JsonPropertyOrder ( 8 ) ]
257
261
public double ElapsedTime { get ; set ; }
258
262
259
- [ JsonProperty ( "code" ) ]
263
+ [ JsonPropertyName ( "code" ) ]
264
+ [ JsonPropertyOrder ( 9 ) ]
260
265
public int Code { get ; set ; }
261
266
262
267
public override string ToJson ( )
263
268
{
264
- return JsonConvert . SerializeObject ( this ,
265
- new StringEnumConverter ( typeof ( SnakeCaseNamingStrategy ) ) ,
266
- new IsoDateTimeConverter ( )
267
- {
268
- DateTimeFormat = TimeFormat
269
- } ) ;
269
+ return JsonSerializer . Serialize ( this , JsonSerializerOptions ) ;
270
270
}
271
271
272
272
public override string ToNormalString ( )
@@ -292,28 +292,29 @@ protected override string GetEventMessage(Trace2FormatTarget formatTarget)
292
292
293
293
public class ChildStartMessage : Trace2Message
294
294
{
295
- [ JsonProperty ( "child_id" ) ]
295
+ [ JsonPropertyName ( "t_abs" ) ]
296
+ [ JsonPropertyOrder ( 8 ) ]
297
+ public double ElapsedTime { get ; set ; }
298
+
299
+ [ JsonPropertyName ( "argv" ) ]
300
+ [ JsonPropertyOrder ( 9 ) ]
301
+ public IList < string > Argv { get ; set ; }
302
+
303
+ [ JsonPropertyName ( "child_id" ) ]
304
+ [ JsonPropertyOrder ( 10 ) ]
296
305
public long Id { get ; set ; }
297
306
298
- [ JsonProperty ( "child_class" ) ]
307
+ [ JsonPropertyName ( "child_class" ) ]
308
+ [ JsonPropertyOrder ( 11 ) ]
299
309
public Trace2ProcessClass Classification { get ; set ; }
300
310
301
- [ JsonProperty ( "use_shell" ) ]
311
+ [ JsonPropertyName ( "use_shell" ) ]
312
+ [ JsonPropertyOrder ( 12 ) ]
302
313
public bool UseShell { get ; set ; }
303
314
304
- [ JsonProperty ( "argv" ) ]
305
- public IList < string > Argv { get ; set ; }
306
-
307
- public double ElapsedTime { get ; set ; }
308
-
309
315
public override string ToJson ( )
310
316
{
311
- return JsonConvert . SerializeObject ( this ,
312
- new StringEnumConverter ( typeof ( SnakeCaseNamingStrategy ) ) ,
313
- new IsoDateTimeConverter ( )
314
- {
315
- DateTimeFormat = TimeFormat
316
- } ) ;
317
+ return JsonSerializer . Serialize ( this , JsonSerializerOptions ) ;
317
318
}
318
319
319
320
public override string ToNormalString ( )
@@ -348,28 +349,29 @@ protected override string GetEventMessage(Trace2FormatTarget formatTarget)
348
349
349
350
public class ChildExitMessage : Trace2Message
350
351
{
351
- [ JsonProperty ( "child_id" ) ]
352
+ [ JsonPropertyName ( "t_abs" ) ]
353
+ [ JsonPropertyOrder ( 8 ) ]
354
+ public double ElapsedTime { get ; set ; }
355
+
356
+ [ JsonPropertyName ( "t_rel" ) ]
357
+ [ JsonPropertyOrder ( 9 ) ]
358
+ public double RelativeTime { get ; set ; }
359
+
360
+ [ JsonPropertyName ( "child_id" ) ]
361
+ [ JsonPropertyOrder ( 10 ) ]
352
362
public long Id { get ; set ; }
353
363
354
- [ JsonProperty ( "pid" ) ]
364
+ [ JsonPropertyName ( "pid" ) ]
365
+ [ JsonPropertyOrder ( 11 ) ]
355
366
public int Pid { get ; set ; }
356
367
357
- [ JsonProperty ( "code" ) ]
368
+ [ JsonPropertyName ( "code" ) ]
369
+ [ JsonPropertyOrder ( 12 ) ]
358
370
public int Code { get ; set ; }
359
371
360
- [ JsonProperty ( "t_rel" ) ]
361
- public double RelativeTime { get ; set ; }
362
-
363
- public double ElapsedTime { get ; set ; }
364
-
365
372
public override string ToJson ( )
366
373
{
367
- return JsonConvert . SerializeObject ( this ,
368
- new StringEnumConverter ( typeof ( SnakeCaseNamingStrategy ) ) ,
369
- new IsoDateTimeConverter ( )
370
- {
371
- DateTimeFormat = TimeFormat
372
- } ) ;
374
+ return JsonSerializer . Serialize ( this , JsonSerializerOptions ) ;
373
375
}
374
376
375
377
public override string ToNormalString ( )
@@ -403,18 +405,17 @@ protected override string GetEventMessage(Trace2FormatTarget formatTarget)
403
405
404
406
public class ErrorMessage : Trace2Message
405
407
{
406
- [ JsonProperty ( "msg" ) ] public string Message { get ; set ; }
408
+ [ JsonPropertyName ( "msg" ) ]
409
+ [ JsonPropertyOrder ( 8 ) ]
410
+ public string Message { get ; set ; }
407
411
408
- [ JsonProperty ( "format" ) ] public string ParameterizedMessage { get ; set ; }
412
+ [ JsonPropertyName ( "format" ) ]
413
+ [ JsonPropertyOrder ( 9 ) ]
414
+ public string ParameterizedMessage { get ; set ; }
409
415
410
416
public override string ToJson ( )
411
417
{
412
- return JsonConvert . SerializeObject ( this ,
413
- new StringEnumConverter ( typeof ( SnakeCaseNamingStrategy ) ) ,
414
- new IsoDateTimeConverter ( )
415
- {
416
- DateTimeFormat = TimeFormat
417
- } ) ;
418
+ return JsonSerializer . Serialize ( this , JsonSerializerOptions ) ;
418
419
}
419
420
420
421
public override string ToNormalString ( )
@@ -440,38 +441,39 @@ protected override string GetEventMessage(Trace2FormatTarget formatTarget)
440
441
441
442
public abstract class RegionMessage : Trace2Message
442
443
{
443
- [ JsonProperty ( "repo" ) ]
444
+ [ JsonPropertyName ( "t_abs" ) ]
445
+ [ JsonPropertyOrder ( 8 ) ]
446
+ public double ElapsedTime { get ; set ; }
444
447
448
+ [ JsonPropertyName ( "repo" ) ]
449
+ [ JsonPropertyOrder ( 9 ) ]
445
450
// Defaults to 1, as does Git.
446
451
// See https://git-scm.com/docs/api-trace2#Documentation/technical/api-trace2.txt-codeltrepo-idgtcode for details.
447
452
public int Repo { get ; set ; } = 1 ;
448
453
449
454
// TODO: Remove default value if support for nested regions is implemented.
450
- [ JsonProperty ( "nesting" ) ]
455
+ [ JsonPropertyName ( "nesting" ) ]
456
+ [ JsonPropertyOrder ( 10 ) ]
451
457
public int Nesting { get ; set ; } = 1 ;
452
458
453
- [ JsonProperty ( "category" ) ]
459
+ [ JsonPropertyName ( "category" ) ]
460
+ [ JsonPropertyOrder ( 11 ) ]
454
461
public string Category { get ; set ; }
455
462
456
- [ JsonProperty ( "label" ) ]
463
+ [ JsonPropertyName ( "label" ) ]
464
+ [ JsonPropertyOrder ( 12 ) ]
457
465
public string Label { get ; set ; }
458
466
459
- [ JsonProperty ( "msg" ) ]
467
+ [ JsonPropertyName ( "msg" ) ]
468
+ [ JsonPropertyOrder ( 13 ) ]
460
469
public string Message { get ; set ; }
461
-
462
- public double ElapsedTime { get ; set ; }
463
470
}
464
471
465
472
public class RegionEnterMessage : RegionMessage
466
473
{
467
474
public override string ToJson ( )
468
475
{
469
- return JsonConvert . SerializeObject ( this ,
470
- new StringEnumConverter ( typeof ( SnakeCaseNamingStrategy ) ) ,
471
- new IsoDateTimeConverter ( )
472
- {
473
- DateTimeFormat = TimeFormat
474
- } ) ;
476
+ return JsonSerializer . Serialize ( this , JsonSerializerOptions ) ;
475
477
}
476
478
477
479
public override string ToNormalString ( )
@@ -497,16 +499,12 @@ protected override string GetEventMessage(Trace2FormatTarget formatTarget)
497
499
498
500
public class RegionLeaveMessage : RegionMessage
499
501
{
502
+ [ JsonPropertyOrder ( 14 ) ]
500
503
public double RelativeTime { get ; set ; }
501
504
502
505
public override string ToJson ( )
503
506
{
504
- return JsonConvert . SerializeObject ( this ,
505
- new StringEnumConverter ( typeof ( SnakeCaseNamingStrategy ) ) ,
506
- new IsoDateTimeConverter ( )
507
- {
508
- DateTimeFormat = TimeFormat
509
- } ) ;
507
+ return JsonSerializer . Serialize ( this , JsonSerializerOptions ) ;
510
508
}
511
509
512
510
public override string ToNormalString ( )
@@ -529,3 +527,9 @@ protected override string GetEventMessage(Trace2FormatTarget formatTarget)
529
527
return Message ;
530
528
}
531
529
}
530
+
531
+ public class SnakeCaseNamingPolicy : JsonNamingPolicy
532
+ {
533
+ public override string ConvertName ( string name ) =>
534
+ name . ToSnakeCase ( ) ;
535
+ }
0 commit comments