2016-03-31 5 views
1

私は、オンラインカレンダーアプリケーションにシリアル化されたバイト配列のシリアルデータを送信するC#ツールを継承しました。オンラインカレンダーはnode.js APIを使用します。私の問題は、serializeされたバイト配列がnode.jsによって解析されないということです(IEでは、req.bodyオブジェクトが空です)。 Node.jsで解析できるようにデータを送信するか、C#バイト配列を処理できるNode.jsでパーサを探します。これはJSON形式です。リクエストを送信するコードは次のとおりです。Node.jsのC#ツールからbyte []を逆シリアル化する

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 []型)を見つけるか、JSON.stringify()が返す形式の何かを含むポストを作ることができるC#モジュールを見つけることによって解決できます。

+0

い私はMyWebClient以外の何かを()を使用する必要があり、この平均値。UploadData ()リクエストを送信するには?この方法のように、バイナリデータを主張しているようです。 – awimley

+0

ああ、申し訳ありませんが、私は誤読のように見えます。私が見ることができる唯一の問題は、あなたが 'Encoding.UTF8'のようなものの代わりに' Encoding.ASCII'を使っていることです。 – cubrr

答えて

2

それは

Encoding.UTF8.GetBytes(json); 

その後UTF8にエンコーディングを変更することをお勧めします、あなたはまた、アップロードする前に、適切なヘッダーを設定する必要があり

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

関連する問題