数组的Newtonsoft StringEnumConverter返回未知数

时间:2019-06-05 15:59:18

标签: c# serialization json.net

在大多数情况下,将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 :(得分:0)

.NET aren't checked中的枚举,因此没有什么可以阻止您使用任意序数值填充它。问题不在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"]