为什么Json.Net在字典键时没有正确地序列化byte []?

时间:2016-10-24 21:00:35

标签: c# json.net

我尝试使用Json.Net序列化k,但是它将所有byte []转换为“System.Byte []”。但是,如果我在字典中反转键和值的类型。使用Base64序列化byte []非常有效。我想知道为什么它不适用于byte []键?背后的原因是什么?

以下是我尝试的代码:

Dictionary<byte[] , int>

1 个答案:

答案 0 :(得分:2)

GsonHub上的Json.NET answered的作者:

  

这是预期的行为。密钥必须是一个字符串。如果Json.NET找不到任何TypeConverter,那么它将调用ToString。

Json.NET没有找到类型转换器,所以它在键上调用ToString。默认情况下,ToString返回类型的名称,在本例中为“System.Byte []”。

词典的值有不同的行为。运行转换逻辑,这就是为什么它们可以正确地序列化为值,因为有BinaryConverter。为什么只有作者知道这一点,但我怀疑它与性能有关,也是一个急需的功能。

最好不要将集合用作对象模型中的键。如果您的密钥是GUID,那么只需使用System.Guid或将Guid转换为字符串即可。