Das Parsen der JSON-date info in ein C# DateTime
Ich habe einen WCF-service, gibt ein CLR-Objekt. Dieses Objekt ist wie folgt definiert:
[DataContract]
public class Person
{
[DataMember]
public string FullName
{
get { return fullName; }
set { id = fullName; }
}
private string fullName = string.Empty;
[DataMember]
public DateTime BirthDate
{
get { return birthDate; }
set { birthDate = value; }
}
}
Instanzen von diesem Objekt erstellt und zurückgegeben von meinem WCF-service. Dieser Dienst sieht wie folgt aus:
[OperationContract]
[WebGet(UriTemplate = "/GetPersonByID/{id}", ResponseFormat = WebMessageFormat.Json)]
public Person GetPersonByID(string id)
{
Person person = FindPersonByID(id);
return person;
}
Wann bekomme ich eine Antwort auf meine Bewerbung, kann ich erfolgreich entpacken Sie die FullName-Wert. Ich habe jedoch nicht erfolgreich konvertieren das Geburtsdatum eines C# DateTime-Objekt in meine client-Anwendung. Wenn in einen string umgewandelt, das Geburtsdatum wie folgt aussieht:
\/Date(1297367252340-0500)\/
Wie bekomme ich in einer C# DateTime-Instanz?
Dank!
- Es gibt keine solche Sache wie ein JSON-Datum.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier sind zwei Optionen:
Können Sie die Methode Deserialisieren von System.Web.Script.Serialisierung.JavaScriptSerializer (in System.Web.Extensions.dll).
oder verwenden Sie die ReadObject-Methode von System.- Laufzeit.Serialisierung.Json.DataContractJsonSerializer (in System.Runtime.Serialization.dll oder in .NET 3.5 in System.ServiceModel.Web.dll).
Stellen Sie sicher, dass Datum ist verpackt in Aussagen wie:
Den Grund, das Datum ist in diesem seltsamen format DateTime ist eine primitive in der WCF. Leider gibt es keine allgemein standardisierten format für die Serialisierung von Daten und Zeiten in JSON -- verschiedene frameworks verwenden Sie verschiedene string-Formate.
Das dilemma ist, dass WCF muss nativ verstehen, dass eine bestimmte Zeichenfolge über dem Draht ist in der Tat ein DateTime, nicht nur ein plain-vanilla-JSON-string. Daher das seltsame format. Sobald DataContractJsonSerializer trifft auf ein Datum beginnend mit \/Datum, beginnt es versucht zu analysieren, es als ein Datum.
Nun, um Ihre Frage zu beantworten, wenn Sie senden eine DateTime-über die Draht, es hängt davon ab, wenn Sie mit einem web-browser-client, Silverlight client, oder ein WCF-client.
Einen WCF-client oder ein Silverlight-2+ - client sollte KEINE Probleme damit haben-Sie sollten die auto-verwenden Sie den DataContractJsoNSerializer, und wenn Sie es nicht verwenden, können Sie plug-in DCJS manuell.
Wenn Sie über einen web-client, können Sie das .js-Datei, die im Lieferumfang von ASP. NET-AJAX (ich glaube es heißt MicrosoftAspNetAjax.js oder MicrosoftAjax.cs, obwohl der name kann sich geändert haben). Seine Deserialisieren Funktion wird automatisch analysiert diese Daten als gut.
Hoffe, das hilft!
Gut, in letzter Zeit musste ich auf ein Android-Handy (Xamarin Studio) app-Projekt, wo ich war nicht in der Lage zu verwenden Newtonsoft Json (Json.NET) aufgrund von Fehlern geworfen, die bei der Bereitstellung dieser spezifischen Geräte-version (Android-API 16-Version 4.2.1).
Luckly ich eine alternative gefunden-Bibliothek für json (System.Json). Allerdings ist diese Bibliothek nicht haben einen Weg von Gießen JSON Datum zu C# DateTime implizit.
Erstellt habe ich die folgenden zwei Funktionen für null-Werte zulässt Datum und Datum Konvertierungen in eine string json-Datum(ich.e /Datum(1389435240000+0000)/)
Den code verbessert werden können, aber es macht den job jetzt
Dieser mein problem gelöst