代码之家  ›  专栏  ›  技术社区  ›  Daniel Earwicker

JSON.NET中的字节数组序列化

  •  7
  • Daniel Earwicker  · 技术社区  · 16 年前

    class HasBytes
    {
        public byte[] Bytes { get; set; }
    }
    

    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);
    

    然后反序列化抛出一个异常:“Expected bytes but got string”。

    新的JsonReader不应该在逻辑上等同于原来的JsonReader吗?为什么“生的” JsonTextReader 能够将字符串视为64字节的基数组 JTokenReader公司 版本没有?

    1 回复  |  直到 16 年前
        1
  •  6
  •   Daniel Earwicker    16 年前