JSON.NET中的字节数组序列化

Dan*_*ker 7 serialization bytearray json.net

鉴于这个简单的类:

class HasBytes
{
    public byte[] Bytes { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我可以通过JSON.NET使字节数组进行base-64编码:

var bytes = new HasBytes { Bytes = new byte[] { 1, 2, 3, 4 } };
var json = JsonConvert.SerializeObject(bytes);
Run Code Online (Sandbox Code Playgroud)

然后我可以用这种稍微过于复杂的方式再次阅读它:

TextReader textReader = new StringReader(json);
JsonReader jsonReader = new JsonTextReader(textReader);
var result = (HasBytes)JsonSerializer.Create(null)
                 .Deserialize(jsonReader, typeof(HasBytes));
Run Code Online (Sandbox Code Playgroud)

都好.但如果我先将内容jsonReader转换为JToken:

var jToken = JToken.ReadFrom(jsonReader);
Run Code Online (Sandbox Code Playgroud)

然后把它JsonReader包装成一个JTokenReader:

jsonReader = new JTokenReader(jToken);
Run Code Online (Sandbox Code Playgroud)

然后反序列化抛出异常:"预期的字节但得到字符串".

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

Dan*_*ker 6

据我所知,这似乎是JTokenReader中的一个错误,所以我在这里报告了它.

更新:已在JSON.NET 3.5发行版7中修复.