#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. Как только я использовал правильную модель, я смог нормально извлечь байты. Спасибо, что подсказали мне еще раз взглянуть на это.