2016-03-31 2 views
1

Ich habe ein C# -Tool geerbt, das ein serialisiertes Byte-Array von Besprechungsdaten an eine Online-Kalenderanwendung sendet. Der Online-Kalender verwendet eine node.js-API. Mein Problem ist, dass das serialisierte Byte-Array von node.js nicht korrekt geparst wird (IE, in express ist das req.body-Objekt leer). Ich suche entweder nach einer Möglichkeit, die Daten zu senden, damit sie von Node.js analysiert werden kann, oder nach einem Parser in Node.js, der C# -Byte-Arrays verarbeiten kann. Es ist JSON formatiert. Hier ist der Code, der die Anfrage sendet:Deserialisierung eines Bytes [] aus C# Tool in Node.js

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

Im Moment versuche ich einfach, die Daten zu protokollieren. Die Route wird hier gefangen:

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

die diese Steuerung verwendet:

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

Die req.body durch meine Parsing-Middleware bevölkert wird:

app.use(bodyParser.json()); 

Dies kann jedoch das Byte-Array nicht umgehen gesendet von dem C# -Programm. Ich kann das lösen, indem ich entweder einen Parser finde, der den C# -POST korrekt behandelt (byte [] -Typ), oder ein C# -Modul finde, das einen Beitrag mit einem Format von JSON.stringify() erzeugen kann.

+0

bedeutet das ich etwas anderes als MyWebClient verwenden soll(). Upload() um die Anfrage zu senden? Scheint so, als ob diese Methode auf binären Daten besteht. – awimley

+0

Ah, sorry, sieht aus wie ich falsch gelesen habe. Das einzige Problem, das ich hier sehen kann, ist, dass Sie 'Encoding.ASCII' anstelle von' Encoding.UTF8' verwenden. – cubrr

Antwort

2

Es ist ratsam, die Kodierung UTF-8

Encoding.UTF8.GetBytes(json); 

Dann sollten Sie auch die entsprechenden Header vor dem Hochladen eingestellt, zu ändern

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

Dies führt dazu, dass die Anforderung in req.body angezeigt wird, jedoch nicht geparst und vollständig unbrauchbar ist. Zum Beispiel, anstelle eines tatsächlichen JSON-Objekts zeigt es [Object-Objekt] (Die Zeichenfolge) – awimley

+0

Ok, wenn Sie in Körper, bedeutet es Transport und Parsing war erfolgreich. Ich denke, das ist falsch mit deinem 'string json', könntest du versuchen es durch' string json = "[123]" 'zu ersetzen? – tenbits

+0

Bitte editieren Sie Ihre Antwort mit "charset = utf-8". Sonst ist es korrekt, ich habe die Ausgabe von Node falsch gelesen. – awimley