diff --git a/src/AzureDevopsTracker.csproj b/src/AzureDevopsTracker.csproj index 3e82198..bb3702c 100644 --- a/src/AzureDevopsTracker.csproj +++ b/src/AzureDevopsTracker.csproj @@ -19,8 +19,8 @@ LICENSE.md.txt A NuGet that allows you to use a Azure DevOps Service Hook to track workitems changes in a simply and detailed way. 8.0.0.0 - 8.0.1 - 8.0.1 + 8.0.2 + 8.0.2 diff --git a/src/DTOs/Fields.cs b/src/DTOs/Fields.cs index f1a0a2f..b5d6220 100644 --- a/src/DTOs/Fields.cs +++ b/src/DTOs/Fields.cs @@ -1,4 +1,5 @@ -using Newtonsoft.Json; +using AzureDevopsTracker.JsonConverters; +using Newtonsoft.Json; using System; using System.Text.Json.Serialization; @@ -32,6 +33,7 @@ public record Fields [JsonPropertyName("System.CreatedBy")] [JsonProperty("System.CreatedBy")] + [System.Text.Json.Serialization.JsonConverter(typeof(CreatedByJsonConverter))] public string CreatedBy { get; init; } [JsonPropertyName("System.ChangedBy")] diff --git a/src/JsonConverters/CreatedByJsonConverter.cs b/src/JsonConverters/CreatedByJsonConverter.cs new file mode 100644 index 0000000..7051e14 --- /dev/null +++ b/src/JsonConverters/CreatedByJsonConverter.cs @@ -0,0 +1,46 @@ +using AzureDevopsTracker.Extensions; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.Json; +using System.Text.Json.Serialization; +using System.Threading.Tasks; + +namespace AzureDevopsTracker.JsonConverters +{ + internal class UserInfo + { + [JsonPropertyName("displayName")] + public string DisplayName { get; set; } + + } + internal class CreatedByJsonConverter : JsonConverter + { + public override string Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + if (reader.TokenType == JsonTokenType.String) + { + var userString = reader.GetString(); + return userString.ExtractEmail(); // Reutiliza seu método de extensão + } + else if (reader.TokenType == JsonTokenType.StartObject) + { + // Desserializa o objeto para UserInfo + var userInfo = JsonSerializer.Deserialize(ref reader, options); + return userInfo?.DisplayName; + } + + // Se não for nem string nem objeto, retorne null ou lance uma exceção + return null; + } + + public override void Write(Utf8JsonWriter writer, string value, JsonSerializerOptions options) + { + // Este conversor é primariamente para leitura (desserialização). + // Se você precisar serializar, precisará definir como o valor string deve ser escrito. + // Para o seu caso de uso (extrair dados do JSON), não é estritamente necessário. + writer.WriteStringValue(value); + } + } +}