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版本却没有?