给定这个简单的类:
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中修复。