给定这个简单的类:
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
版本却没有?