【问题标题】:Parse byte array to json with Json.Net使用 Json.Net 将字节数组解析为 json
【发布时间】:2013-12-24 18:18:50
【问题描述】:

我正在尝试使用 Json.Net 将 byte[] 数组解析为 Dictionary<String,Object> 但没有成功

其实我怀疑它的可能性。那么有可能吗?使用这个库还是使用任何其他库?

这是我尝试过的,但 DeserializeObject 仅将字符串作为参数 afaik 除外

public static Dictionary<String, Object> parse(byte[] json){
     Dictionary<String, Object> values = JsonConvert.DeserializeObject<Dictionary<String, Object>>(json);
     return values;
}

【问题讨论】:

  • 要序列化吗?
  • byte[] 数据的格式是什么?例如。它是编码的 JSON 文本吗?
  • 是的 Pouya Samie,我想序列化,是的 Tim S。它编码为 json 格式

标签: c# json


【解决方案1】:

byte[] 是某种编码文本吗?如果是这样,请先对其进行解码,例如如果编码是UTF8:

public static Dictionary<String, Object> parse(byte[] json){
     string jsonStr = Encoding.UTF8.GetString(json);
     return JsonConvert.DeserializeObject<Dictionary<String, Object>>(jsonStr);
}

【讨论】:

    【解决方案2】:

    要了解 byte[] 中的内容,您应该指定编码并使用可以实际获取 byte[] 的方法。

    由于我不知道这种方法,这将是您问题的解决方案 -

    所以正确的做法是-

    public static Dictionary<String, Object> parse(byte[] json)
    {
        var reader = new StreamReader(new MemoryStream(json), Encoding.Default);
    
        Dictionary<String, Object> values = new JsonSerializer().Deserialize<Dictionary<string, object>>(new JsonTextReader(reader));
    
        return values;
    }
    

    另一种可能有助于解释反序列化的方法是 -

    var jsonString = System.Text.Encoding.Default.GetString(json);
                Dictionary<String, Object> values = JsonConvert.DeserializeObject<Dictionary<String, Object>>(jsonString);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-08
      相关资源
      最近更新 更多