2010-04-15 36 views
7

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?

Trả lời

6

Dường như đây là lỗi trong JTokenReader theo như tôi thấy, vì vậy tôi đã reported it here.

Cập nhật: cố định trong JSON.NET 3.5 release 7.