2016-03-31 2 views
1

Я унаследовал инструмент C#, который отправляет сериализованный массив байтов данных собрания в приложение онлайн-календаря. В онлайн-календаре используется API-интерфейс node.js. Моя проблема заключается в том, что сериализованный массив байтов не получает обработанную корреляцию node.js (IE, в выражении объекта req.body пусто). Я ищу либо способ отправки данных, чтобы он мог анализироваться Node.js, либо парсер в Node.js, который может обрабатывать массивы байтов C#. Это JSON отформатирован. Вот код, который отправляет запрос:Deserializing byte [] из инструмента C# в Node.js

string json = JsonConvert.SerializeObject(reallyPost, Formatting.None); 
byte[] postThisz = Encoding.ASCII.GetBytes(json); 
byte[] response = wc.UploadData(siteUrl, postThisz); 

На данный момент я просто пытаюсь зарегистрировать данные. Маршрут ловится здесь:

app.post('/remotePost', api.remotePost); 

, который использует этот контроллер:

module.exports.remotePost = function (req, res) { 
    console.log(req); 
    console.log(req.body); 
    sendJsonResponse(res, 200, "remote posted."); 
}; 

req.body получает населен мой разбор промежуточного слоя:

app.use(bodyParser.json()); 

Однако это не может обрабатывать массив байт отправленный программой C#. Я могу решить это, найдя парсер, который будет правильно обрабатывать C# POST (тип byte []) или найти модуль C#, который может создать сообщение, содержащее что-то из формата, возвращаемого JSON.stringify().

+0

Означает ли это, я должен использовать что-то другое, чем MyWebClient(). UploadData() для отправки запроса? Похоже, этот метод настаивает на двоичных данных. – awimley

+0

А, извините, похоже, я неправильно понял. Единственная проблема, которую я вижу, заключается в том, что вы используете 'Encoding.ASCII' вместо чего-то вроде' Encoding.UTF8'. – cubrr

ответ

2

Желательно, чтобы изменить кодировку utf8

Encoding.UTF8.GetBytes(json); 

Затем вы должны также установить соответствующие заголовки перед загрузкой

wc.Headers.Add("Content-Type", "application/json; charset=utf8"); 
+0

Это успешно делает запрос отображаемым в req.body, однако он не анализируется и полностью непригоден. Например, вместо фактического объекта JSON он показывает [Объект объекта] (Строка) – awimley

+0

Хорошо, когда вы имеете дело с телом, это означает, что транспорт и синтаксический анализ были успешными. Я думаю, что неправильно с вашим 'string json', вы могли бы попытаться заменить его на' string json = "[123]" '? – tenbits

+0

Измените свой ответ, чтобы прочитать «charset = utf-8». В противном случае, это правильно, я неправильно читал вывод Node. – awimley