using System.ComponentModel.DataAnnotations; using System.Text.Json; using System.Text.Json.Serialization; namespace AsbCloudWebApi.IntegrationTests.Converters; public class ValidationResultConverter : JsonConverter { public override ValidationResult Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType != JsonTokenType.StartObject) { throw new JsonException("Expected the start of an object."); } string? errorMessage = null; List? memberNames = null; while (reader.Read()) { if (reader.TokenType == JsonTokenType.EndObject) { break; } if (reader.TokenType != JsonTokenType.PropertyName) { throw new JsonException($"Unexpected token type: {reader.TokenType}"); } var propertyName = reader.GetString(); reader.Read(); switch (propertyName) { case "errorMessage": errorMessage = reader.GetString(); break; case "memberNames": if (reader.TokenType != JsonTokenType.StartArray) { throw new JsonException("Expected the start of an array for 'memberNames'."); } memberNames = new List(); while (reader.Read() && reader.TokenType != JsonTokenType.EndArray) { memberNames.Add(reader.GetString() ?? string.Empty); } break; default: reader.Skip(); break; } } if (errorMessage == null) { throw new JsonException("Missing 'errorMessage' property."); } return new ValidationResult(errorMessage, memberNames ?? Enumerable.Empty()); } public override void Write(Utf8JsonWriter writer, ValidationResult value, JsonSerializerOptions options) { throw new NotImplementedException(); } }