我尝试使用Json.Net序列化k
,但是它将所有byte []转换为“System.Byte []”。但是,如果我在字典中反转键和值的类型。使用Base64序列化byte []非常有效。我想知道为什么它不适用于byte []键?背后的原因是什么?
以下是我尝试的代码:
Dictionary<byte[] , int>
答案 0 :(得分:2)
GsonHub上的Json.NET answered的作者:
这是预期的行为。密钥必须是一个字符串。如果Json.NET找不到任何TypeConverter,那么它将调用ToString。
Json.NET没有找到类型转换器,所以它在键上调用ToString
。默认情况下,ToString
返回类型的名称,在本例中为“System.Byte []”。
词典的值有不同的行为。运行转换逻辑,这就是为什么它们可以正确地序列化为值,因为有BinaryConverter
。为什么只有作者知道这一点,但我怀疑它与性能有关,也是一个急需的功能。
最好不要将集合用作对象模型中的键。如果您的密钥是GUID,那么只需使用System.Guid
或将Guid转换为字符串即可。