Парсе байтов массива 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);