Với lớp đơn giản này:Byte mảng serialization trong JSON.NET
class HasBytes
{
public byte[] Bytes { get; set; }
}
tôi có thể đặt nó thông qua JSON.NET như vậy mà các mảng byte là cơ sở-64 được mã hóa:
var bytes = new HasBytes { Bytes = new byte[] { 1, 2, 3, 4 } };
var json = JsonConvert.SerializeObject(bytes);
Sau đó, tôi có thể đọc lại nó theo cách hơi phức tạp này:
TextReader textReader = new StringReader(json);
JsonReader jsonReader = new JsonTextReader(textReader);
var result = (HasBytes)JsonSerializer.Create(null)
.Deserialize(jsonReader, typeof(HasBytes));
Tất cả đều tốt. Nhưng nếu tôi lần đầu tiên lần lượt các nội dung của jsonReader
thành một JToken
:
var jToken = JToken.ReadFrom(jsonReader);
Và sau đó rẽ mà trở thành một JsonReader
bằng cách gói nó trong một JTokenReader
:
jsonReader = new JTokenReader(jToken);
Sau đó deserialization ném một ngoại lệ: " Dự kiến byte nhưng có chuỗi ".
Không nên JsonReader mới tương đương về mặt logic với bản gốc? Tại sao "raw" JsonTextReader
có khả năng xử lý một chuỗi như là một mảng byte cơ sở 64 trong khi phiên bản JTokenReader
thì không?