From f8717c3a11e5e41fb4f0a768899b0c64c8325435 Mon Sep 17 00:00:00 2001 From: Sergey Samsonov <47633867+Weegley@users.noreply.github.com> Date: Wed, 22 Jul 2026 14:58:05 +0300 Subject: [PATCH] Handle unknown spouse sex values --- .../BadSpouseSexConverterTests.cs | 31 +++++++++++++++++++ .../Patchers/BadSpouseSexConverter.cs | 28 +++++++++++++++++ .../DeclarationPatcherContractResolver.cs | 1 + 3 files changed, 60 insertions(+) create mode 100644 src/KinopoiskUnofficialInfo.ApiClient.Tests/BadSpouseSexConverterTests.cs create mode 100644 src/KinopoiskUnofficialInfo.ApiClient/Patchers/BadSpouseSexConverter.cs diff --git a/src/KinopoiskUnofficialInfo.ApiClient.Tests/BadSpouseSexConverterTests.cs b/src/KinopoiskUnofficialInfo.ApiClient.Tests/BadSpouseSexConverterTests.cs new file mode 100644 index 00000000..537a58c4 --- /dev/null +++ b/src/KinopoiskUnofficialInfo.ApiClient.Tests/BadSpouseSexConverterTests.cs @@ -0,0 +1,31 @@ +using Newtonsoft.Json; +using Xunit; + +namespace KinopoiskUnofficialInfo.ApiClient.Tests +{ + public class BadSpouseSexConverterTests + { + [Fact] + public void ShouldDeserializeUnknownSpouseSex() + { + const string json = + "{\"personId\":1,\"name\":\"Test\",\"divorced\":false," + + "\"divorcedReason\":\"\",\"sex\":\"UNKNOWN\",\"children\":0," + + "\"webUrl\":\"\",\"relation\":\"\"}"; + + var settings = new JsonSerializerSettings + { + ContractResolver = new DeclarationPatcherContractResolver() + }; + + var result = JsonConvert.DeserializeObject( + json, + settings); + + Assert.NotNull(result); + Assert.Equal( + (PersonResponse_spousesSex)(-1), + result.Sex); + } + } +} diff --git a/src/KinopoiskUnofficialInfo.ApiClient/Patchers/BadSpouseSexConverter.cs b/src/KinopoiskUnofficialInfo.ApiClient/Patchers/BadSpouseSexConverter.cs new file mode 100644 index 00000000..88494f71 --- /dev/null +++ b/src/KinopoiskUnofficialInfo.ApiClient/Patchers/BadSpouseSexConverter.cs @@ -0,0 +1,28 @@ +using System; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; + +namespace KinopoiskUnofficialInfo.ApiClient +{ + public class BadSpouseSexConverter : StringEnumConverter + { + public override bool CanConvert(System.Type objectType) + => objectType == typeof(PersonResponse_spousesSex); + + public override object ReadJson( + JsonReader reader, + System.Type objectType, + object existingValue, + JsonSerializer serializer) + { + try + { + return base.ReadJson(reader, objectType, existingValue, serializer); + } + catch (Exception) + { + return (PersonResponse_spousesSex)(-1); + } + } + } +} diff --git a/src/KinopoiskUnofficialInfo.ApiClient/Patchers/DeclarationPatcherContractResolver.cs b/src/KinopoiskUnofficialInfo.ApiClient/Patchers/DeclarationPatcherContractResolver.cs index 621bbd0b..587b12ad 100644 --- a/src/KinopoiskUnofficialInfo.ApiClient/Patchers/DeclarationPatcherContractResolver.cs +++ b/src/KinopoiskUnofficialInfo.ApiClient/Patchers/DeclarationPatcherContractResolver.cs @@ -12,6 +12,7 @@ public class DeclarationPatcherContractResolver : DefaultContractResolver new BadIntegerConverter(), new BadDoubleConverter(), new BadProfessionKeyConverter(), + new BadSpouseSexConverter(), new BadProductionStatusConverter(), new BadFilmSearchResponse_filmsTypeConverter(), };