给定这个简单的类:

class HasBytes
{
    public byte[] Bytes { get; set; }
}

我可以通过JSON.NET来放置它,以便字节数组以base-64编码:
var bytes = new HasBytes { Bytes = new byte[] { 1, 2, 3, 4 } };
var json = JsonConvert.SerializeObject(bytes);

然后,我可以用稍微有点复杂的方式重新读一遍:
TextReader textReader = new StringReader(json);
JsonReader jsonReader = new JsonTextReader(textReader);
var result = (HasBytes)JsonSerializer.Create(null)
                 .Deserialize(jsonReader, typeof(HasBytes));

都好。但是,如果我首先将jsonReader的内容转换为JToken:
var jToken = JToken.ReadFrom(jsonReader);

然后通过将其包装在JsonReader中,将其转换回JTokenReader:
jsonReader = new JTokenReader(jToken);

然后反序列化将引发异常:“期望的字节数但得到了字符串”。

新的JsonReader在逻辑上不应该与原始JsonReader等效吗?为什么“原始” JsonTextReader能够将字符串视为基数为64的字节数组,而JTokenReader版本却没有呢?

最佳答案

据我所知,这似乎是JTokenReader中的错误,因此我具有reported it here

更新:JSONt_rstrong已在JSON.NET 3.5版本7中修复。

08-16 17:07