Парсе байтов массива json с Json.Net
Я пытаюсь проанализировать массив byte[]
в Dictionary<String,Object>
с помощью Json.Net, но без успеха
На самом деле я сомневаюсь в его возможности. Так это возможно? с этой библиотекой или с любой другой библиотекой?
вот что я пробовал, но DeserializeObject исключает только строку в качестве параметра afaik
public static Dictionary<String, Object> parse(byte[] json){
Dictionary<String, Object> values = JsonConvert.DeserializeObject<Dictionary<String, Object>>(json);
return values;
}
Ответы
Ответ 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
Чтобы понять, что в байте [] вы должны указать кодировку и использовать метод, который действительно может получить байт [].
Поскольку я не знаю такого метода, это будет решением вашей проблемы -
Таким образом, правильный способ сделать это будет -
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;
}
Другой способ, который мог бы помочь объяснить, что нужно сделать для deserilaize, будет -
var jsonString = System.Text.Encoding.Default.GetString(json);
Dictionary<String, Object> values = JsonConvert.DeserializeObject<Dictionary<String, Object>>(jsonString);