7

给定这个简单的类:

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然后通过将其包装在 a 中将其转回a JTokenReader

jsonReader = new JTokenReader(jToken);

然后反序列化抛出异常:“预期字节但得到字符串”。

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

4

1 回答 1

6

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

更新:在 JSON.NET 3.5 第 7 版中修复。

于 2010-04-15T15:02:30.510 回答