Gewusst wie: übergeben Sie ein TimeSpan-Objekt, um eine WCF-Methode verwenden JSON
Ich versuche einen Weg zu finden, rufen Sie eine WCF-Methode unter Verwendung von JSON und geben Sie eine Zeitspanne als parameter, aber ich erhalte immer ein "Bad request" Antwort vom service.
Hier ist ein snippet-code service-Schnittstelle:
[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)]
TimeSpan GetTimeSpan(TimeSpan value);
Service-Aufruf:
String method = "GetTimeSpan";
String result = null;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url + method);
request.KeepAlive = false;
request.Method = WebRequestMethods.Http.Post;
request.ContentType = "application/json";
JsonSerializer serializer = new JsonSerializer();
TimeSpan ts = new TimeSpan(23, 59, 59);
String jsonString = JsonConvert.SerializeObject(ts);
String data = jsonString; //jsonString = "23:59:59"
//I have already tryed with {"value": "23:59:59"} and the result is the same, bad request.
request.ContentLength = data.Length;
StreamWriter writer = new StreamWriter(request.GetRequestStream());
writer.Write(data);
writer.Close();
WebResponse response = request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());
result = reader.ReadToEnd();
response.Close();
Dies ist nur ein Beispiel. Beim Anruf einer service-ohne Zeitspanne, funktioniert alles einwandfrei. Ich brauche, um es zu arbeiten, um zu halten die Kompatibilität mit anderen clients, die das konsumieren des Dienstes in der typischen Art und Weise.
Antwort:
Dem remote server hat einen Fehler zurückgegeben: (400) Bad Request.
Bin ich vorbei an der falschen Zeitspanne json Repräsentation? Oder gibt es eine Möglichkeit zu definieren, wie zum Deserialisieren der Zeitspanne, wenn der service die Anfrage verarbeitet?
Vielen Dank im Voraus
- TimeSpan kann nicht serialisiert werden. Wahrscheinlich doppelte von stackoverflow.com/questions/3232701/...
- diese Frage wurde über WCF auf .NET 3.5 (mit VS2008 so eine ziemlich gute Vermutung). Vielleicht hat sich geändert, seit .NET 4.0? Vielleicht OP klären könnte .NET-version?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Format für
TimeSpan
verwendet, der von der WCF ist nicht das gleiche, durch die Newtonsoft JSON serializer (JSON.NET) . Sie können serialisieren einer TimeSpan-Instanz, die mit derDataContractJsonSerializer
(DCJS), und dass das format erforderlich, die von einem WCF REST service.Den code unten wird das drucken der Formate, die von einigen
TimeSpan
Werte als serialisierte von beiden JSON.NET und DCJS:Für alle, die immer noch ein problem mit WCF-serializer, ich habe die Lösung gefunden, wie dieser : verwenden Sie Ihren eigenen Formatierer aber stellen Sie sicher, clearing alle formatter.