2016-07-08 10 views
0

Ich verwende mehrere in C# codierte API, die gut funktioniert. Ich möchte einen verwenden, der ein anonymes Objekt empfängt (ich möchte keine Klasse erstellen). Ich habe ein Problem, wenn ich versuche, das Objekt zu deserialisieren.C# API "Unerwartetes Zeichen beim Analysieren von Werten gefunden: S. Pfad '', Zeile 0, Position 0"

Ich habe eine API nach diesem Schema, es funktioniert gut, wenn es von python mit der json_dumps Funktion aufgerufen wird. Aber wenn ich mit JSON.stringify (von einem ausprobieren oder sogar POSTMAN, habe ich ein 400 Bad Request

Hier ist mein Code, habe ich viele Dinge ausprobiert.

[WebInvoke(Method = "POST", UriTemplate = "myUrl")] 
[OperationContract] 
public Message myMethod(object objectSentByUser) 
{ 

    var perso = JsonConvert.DeserializeObject<dynamic>(objectSentByUser.ToString()); 

JsonConvert.DeserializeObject<dynamic> wartet auf eine Zeichenfolge , ich habe versucht:

-bis objectSentByUser als Zeichenfolge im Argument von myMethod Wenn ich so gebe ich einen 400 ohne auch nur Eingabe der Methode haben (ich habe versucht, eine JSON zu schicken, Anführungszeichen zu verwenden, um senden Sie eine Zeichenfolge etc ...)

-bis mit (string)objectSentByUser gegossen, es nicht funktioniert

-bis zu verwenden, um die toString()-Methode, die auf den nächsten Fehler führt: Unexpected Charakter auf beim Parsing-Wert: S. Pfad ‚‘, Zeile 0, der Position 0 , die ganz normal ist, weil objectSentByUser.toString() returns „System.Object“ (aber warum es, wenn sie mit python json_dump verwendet funktioniert?)

Dieser Code, wenn sie mit python Funktion json_dump, die ein Objekt wie folgt zurückgibt genannt funktioniert:

"{\\" Schlüssel1 \\ ": \\" Wert1 \\ ", ...}"

Von Postman mir eine klassischen POST mit application/json als contentType und einer gültigen JSON im Körper sende

Vielen Dank für Ihre Hilfe

See (auf einer Website in einer anderen Diskussion über Stackoverflow gefunden prüft) Sie

Antwort

1

Wenn der Benutzer eine gültige JSON-Zeichenfolge an Ihre Aktion sendet, dann akzeptieren Sie kein Objekt als Parameter, sondern eine Zeichenfolge (dh weil dein Benutzer dir eins sendet).

Wenn Sie ToString() auf ein Objekt aufrufen, sind die Chancen, es ist nicht in einem Json Format.

versuchen, eine Zeichenfolge und Deserialisieren dass akzeptieren:

[WebInvoke(Method = "POST", UriTemplate = "myUrl")] 
[OperationContract] 
public Message myMethod(string jsonSentByUser) 
{ 

    var perso = JsonConvert.DeserializeObject<dynamic>(jsonSentByUser); 
+0

Vielen Dank für Ihre Antwort. Wenn ich die API dank POSTMAN mit contentType-Anwendung/JSON und einem JSON-Objekt im Körper versuche, erhalte ich eine 400 schlechte Anfrage, ich gebe nicht einmal myMethod ein. Es funktioniert, wenn ich ein Objekt formatiert diese Weise senden: „{\“ key1 \ „: \“ Wert1 \ „...}“ Ich weiß nicht, warum ich mit den Python Doppelschrägstriche versucht und nicht mit einzelnen Backslashes .. – heythere

Verwandte Themen