Skip to content

Commit 017ae93

Browse files
committed
Improve CreatedBy property deserialization logic
1 parent bad4c79 commit 017ae93

File tree

3 files changed

+51
-3
lines changed

3 files changed

+51
-3
lines changed

src/AzureDevopsTracker.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@
1919
<PackageLicenseFile>LICENSE.md.txt</PackageLicenseFile>
2020
<Description>A NuGet that allows you to use a Azure DevOps Service Hook to track workitems changes in a simply and detailed way.</Description>
2121
<AssemblyVersion>8.0.0.0</AssemblyVersion>
22-
<FileVersion>8.0.1</FileVersion>
23-
<Version>8.0.1</Version>
22+
<FileVersion>8.0.2</FileVersion>
23+
<Version>8.0.2</Version>
2424
<PackageReleaseNotes></PackageReleaseNotes>
2525
</PropertyGroup>
2626

src/DTOs/Fields.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using Newtonsoft.Json;
1+
using AzureDevopsTracker.JsonConverters;
2+
using Newtonsoft.Json;
23
using System;
34
using System.Text.Json.Serialization;
45

@@ -32,6 +33,7 @@ public record Fields
3233

3334
[JsonPropertyName("System.CreatedBy")]
3435
[JsonProperty("System.CreatedBy")]
36+
[System.Text.Json.Serialization.JsonConverter(typeof(CreatedByJsonConverter))]
3537
public string CreatedBy { get; init; }
3638

3739
[JsonPropertyName("System.ChangedBy")]
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
using AzureDevopsTracker.Extensions;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.Linq;
5+
using System.Text;
6+
using System.Text.Json;
7+
using System.Text.Json.Serialization;
8+
using System.Threading.Tasks;
9+
10+
namespace AzureDevopsTracker.JsonConverters
11+
{
12+
internal class UserInfo
13+
{
14+
[JsonPropertyName("displayName")]
15+
public string DisplayName { get; set; }
16+
17+
}
18+
internal class CreatedByJsonConverter : JsonConverter<string>
19+
{
20+
public override string Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
21+
{
22+
if (reader.TokenType == JsonTokenType.String)
23+
{
24+
var userString = reader.GetString();
25+
return userString.ExtractEmail(); // Reutiliza seu método de extensão
26+
}
27+
else if (reader.TokenType == JsonTokenType.StartObject)
28+
{
29+
// Desserializa o objeto para UserInfo
30+
var userInfo = JsonSerializer.Deserialize<UserInfo>(ref reader, options);
31+
return userInfo?.DisplayName;
32+
}
33+
34+
// Se não for nem string nem objeto, retorne null ou lance uma exceção
35+
return null;
36+
}
37+
38+
public override void Write(Utf8JsonWriter writer, string value, JsonSerializerOptions options)
39+
{
40+
// Este conversor é primariamente para leitura (desserialização).
41+
// Se você precisar serializar, precisará definir como o valor string deve ser escrito.
42+
// Para o seu caso de uso (extrair dados do JSON), não é estritamente necessário.
43+
writer.WriteStringValue(value);
44+
}
45+
}
46+
}

0 commit comments

Comments
 (0)