Как извлечь массив байтов из JSON-массива пар ключ: значение

#c# #sharepoint

#c# #sharepoint

Вопрос:

В веб-службе я преобразовал документ Word, хранящийся в элементе списка, в массив байтов, используя:

документ.Байты = элемент.Файл.OpenBinary();

затем объединил его с некоторыми другими данными, чтобы получить следующий вывод в формате JSON:

 {"Bytes":[208,207,17,224,161,177,26,225,0,0,0,0,0,etc., etc.],"Status":"Pending","Title":"Handbook","Version":"1"}
  

На принимающей стороне я хочу извлечь документ Word. Это код, который я в настоящее время использую, чтобы попытаться извлечь массив байтов, но просто не могу заставить его работать. Должно быть, здесь я нахожусь на совершенно неправильном пути.

Есть мысли или идеи о том, как подойти к этому? Сначала это казалось простой проблемой, но отняло часы моего времени!

Примечание: В приведенном ниже коде GetDoc (url) вызывает веб-службу, которая генерирует JSON

 using Newtonsoft.Json.Linq;
public byte[] GetJSONBytes(string url)
{   
    string ReturnJSON = GetDoc(url);  
    var objects = JArray.Parse(ReturnJSON); // parse as array  
    foreach (JObject root in objects)
        {
            foreach (KeyValuePair<String, JToken> app in root)
            {
                var appKey = app.Key;
                if (appKey == "Bytes")
                {
                    return (byte[])(app.Value);
                }
            }
        }
        return null;
    }
  

Когда он попадает в строку:

возврат (byte[])(app.Value);

Я получаю следующее сообщение об ошибке:

Система.Исключение ArgumentException: ‘Не удается преобразовать массив в массив байтов.’

Комментарии:

1. Почему вы не хотите использовать C # object для этого?

2. Можете ли вы расширить?

3. Вы можете создать объект C #, который напоминает структуру вашего JSON, и использовать JsonConverter.DeserializeJson<T>(string) для десериализации заданной строки JSON в объект C #. Таким образом, не только проще получить доступ к вашему массиву байтов, просто указав на свойство объекта, но и намного безопаснее, чем переход через JTokens.

4. Я пробовал что-то подобное, но не смог извлечь JSON, представляющий документ Word в виде строки из JSON, поэтому я попробовал вышеуказанный метод. Я знаю, что, должно быть, упускаю что-то очевидное, но на данный момент зашел в тупик.

5. Доминик — Ты был прав! Я использовал неправильную объектную модель для JSON. Как только я использовал правильную модель, я смог нормально извлечь байты. Спасибо, что подсказали мне еще раз взглянуть на это.