在大多数情况下,将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个项目? 有一些二进制编码吗?
答案 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"]