Changer le json DateTime sérialisation dans WCF 4.0 Service REST
J'ai besoin de remplacer la date de sérialisation JSON dans WCF REST Auto service Hébergé. Maintenant, je suis en utilisant quelque chose comme le code suivant pour le faire, mais c'est certainement pas la voie à suivre car elle nécessite la manipulation de chaque classe.
[DataContract]
public class Test
{
[IgnoreDataMember]
public DateTime StartDate;
[DataMember(Name = "StartDate")]
public string StartDateStr
{
get { return DateUtil.DateToStr(StartDate); }
set { StartDate = DateTime.Parse(value); }
}
}
où ma fonction d'utilité DateUtil.DateToStr fait tout le travail de mise en page.
Est-il un moyen facile de le faire sans avoir à toucher les attributs de ma classe qui ont le DataContract attribut? Idéalement, il n'y aurait pas d'attributs, mais un couple de lignes de code dans ma configuration pour remplacer le sérialiseur avec celui sur lequel j'ai remplacé DateTime sérialisation.
Tout ce que j'ai trouvé on dirait que j'ai pour remplacer les énormes morceaux de la canalisation.
Cet article ne semble pas s'appliquer parce qu'en je suis en utilisant WebServiceHost pas HttpServiceHost, qui ne fait pas partie du Framework 4.5.1.
JSON.NET Sérialiseur pour les Services REST
OriginalL'auteur bpeikes | 2014-09-17
Vous devez vous connecter pour publier un commentaire.
J'espère que vous avez également essayé de messageformatter dans WCF. Puisque c'est une longue explication,je suis passer sur le lien à cet article.
http://blogs.msdn.com/b/carlosfigueira/archive/2011/05/03/wcf-extensibility-message-formatters.aspx
OriginalL'auteur Arindam Nayak
Il y a une limitation dans le JSON pour convertir
DateTime
, spécialement en fonction de votre cas.Veuillez voir http://msdn.microsoft.com/en-us/library/bb412170(v=vs. 110).aspx
et lisez la section
Dates/Times and JSON
Pour résoudre ce problème, j'ai simplement changé le type de sérialisation de
JSON
àXML
pour tous les appels, y compris lesDateTime
.il y a une limitation. J'ai oublié le lien exact où j'ai vu la limitation de détails, mais avez-vous essayé XML? Il fonctionne parfaitement avec XML. Également voir comment les données sont sérialisées en JSON, quelque chose comme /DATE(7002340200+3000)/
S'il vous plaît aller à travers les liens suivants: stackoverflow.com/questions/10302902/... hanselman.com/blog/...
Nous avons déjà une énorme quantité de code qui utilise json sur le côté client. J'ai utilisé mon travail sur le serveur. Afin que nous puissions continuer à l'utiliser. J'ai lu les deux articles que vous avez posté. Ni de leur parler du fait que la DataContractJsonSerializer, qui fait partie de la WCF a un membre appelé DateTimeFormat. Télécharger de la source de référence pour la WCF et vous verrez qu'il est là.
OriginalL'auteur DJ'
Au bout d'une longue discussion ,j'ai trouver la solution pour elle.
Veuillez Utiliser le Code suivant pour Résoudre sérialisé date..
OriginalL'auteur Ragupathy
Par défaut WCF utilise DataContractJsonSerializer pour sérialiser des données en JSON. Malheureusement, date à partir de ce processus est très difficile de format pour analyser par le cerveau humain.
Pour remplacer ce comportement, il nous faut écrire personnalisé IDispatchMessageFormatter. Cette classe permettra de recevoir toutes les données qui doivent être retournés au demandeur et modifier en fonction de nos besoins.
Pour réaliser les opérations dans le point final ajouter des formateur - ClientJsonDateFormatter:
ClientJsonDateFormatter est simple classe qui s'applique uniquement formateur ClientJsonDateFormatter
Dans le formateur nous a pris imput et sérialiser avec la changé Sérialiseur:
Et d'envoyer des informations au client, nous avons besoin de données de l'écrivain - RawDataWriter. Sa mise en œuvre est simple:
L'application de l'ensemble du code entraînera la date de retour plus en forme:
De le montrer dans la pratique, j'ai créé exemple dans le github branche DateTimeFormatter.
Vérifiez également cette réponse que très probablement vous aussi vous en aurez besoin.
OriginalL'auteur Pawel Wujczyk