Newtonsoft StringEnumConverter для массивов возвращает неизвестные числа - PullRequest
1 голос
/ 05 июня 2019

Использование Newtonsoft Json.Net (11.0.2) с StringEnumConverter, кажется, работает большую часть времени, но иногда мы получаем массив Json с числами в нем, которые не соответствуют массиву.Кто-нибудь знает, как это может происходить?

Я пытался настроить тесты для имитации странного вывода, но каждый раз он работает как положено.Я думаю, что, возможно, существует проблема с памятью, которая вызывает странное поведение, поскольку мы видим это только в производстве.

Поэтому мы настраиваем параметры сериализатора с помощью StringEnumConverter и используем в качестве примера следующее перечисление:

    public enum TestType
    {
        FirstOption,
        SecondOption,
        ThirdOption
    }

var example = new List<TestType>() { TestType.FirstOption, TestType.SecondOption };

Это пример ожидаемого результата

[
"FistOption",
"SecondOption"
]

Это результат, который мы получаем большую часть времени, однако в производстве мы получаем

[13]

Перечислениене имеет 13 предметов в нем, так как он генерирует 13?Есть ли какая-то двоичная кодировка?

1 Ответ

0 голосов
/ 05 июня 2019

Перечисления в .NET не проверяются , поэтому ничто не мешает вам заполнить его произвольным порядковым значением. Проблема не в JSON.NET, а где-то, где вы заполняете данные для сериализации.

Вот простой тестовый пример:

[JsonConverter(typeof(StringEnumConverter))]
public enum TestType
{
    FirstOption,
    SecondOption,
    ThirdOption
}

public const TestType Unlucky13 = (TestType)13;

public static void Main()
{
    var testCase = new[] { TestType.FirstOption, TestType.SecondOption };
    Console.WriteLine(JsonConvert.SerializeObject(testCase));
    testCase[0] = Unlucky13;
    Console.WriteLine(JsonConvert.SerializeObject(testCase));
}

Вывод:

["FirstOption","SecondOption"]
[13,"SecondOption"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...