Changement de date par défaut de la sérialisation dans WCF
Est-il de toute façon à modifier la valeur par défaut JSON de sérialisation/désérialisation de DateTime dans WCF?
Actuellement, DateTime sont sérialisées dans le /Date(1372252162657+0200)/
format, ce qui aurait été bien, mais je suis en cours d'exécution dans les questions lors de mon serveur n'est pas en UTC (que je ne peux pas changer).
Toutes les données de date/heure qui est en cours de traitement par ce service sont au format UTC. Tout fonctionne lorsque le serveur est en UTC. Cependant, la mise en scène/prod environnements sont mis à l'heure GMT+1(Paris) et le processus est en supposant que les dates/heures sont au format GMT+1, en ignorant complètement l'attribut Kind
. Donc, comme vous vous y attendez l'appel de DateTime.SetKind()
et le mettre à l'UTC ne fonctionnera pas. En effet, la sérialisé les temps sont retardées d'une heure.
Je peux soit faire les deux sens date de conversations (il fait aussi la même hypothèse lors de la désérialisation de sorte que son toujours GMT+1) conversation de dates: UTC/à partir de serveur de temps, mais c'est fastidieux. J'ai donc pensé que je pourrais peut-être de substituer la sérialisation par défaut de comportement.
OriginalL'auteur Mel | 2013-08-29
Vous devez vous connecter pour publier un commentaire.
Oui, cela peut être fait en utilisant le concept appelé "Message Formateurs"
Mais Message Formateur serait difficile et hors de portée de l'expliquer ici, sur un débordement de pile.
Vous pouvez vous référer WCF Extensibilité : Message de Formatage
Si vous ne voulez pas gâcher, avec ce alors un hack est disponible.
Défini le type de retour de chaque méthode de Flux.
par exemple
ici la méthode ToJson() est ma propre méthode d'extension qui convertit l'objet en chaîne json à l'aide de NewtonSoft de la bibliothèque.
WCF va sauter dans le flux de sortie pour la sérialisation et la volonté de le passer à votre client, car il est.
J'espère que vous avez votre réponse.
OriginalL'auteur Ronak Patel
Juste pour élargir sur tdelepine'extrait de code, voici le code que j'ai utilisé:
Dans mon WCF JSON Service, j'ai eu un (nullable) valeur de type DateTime, et voulais que mes service pour retourner la date dans un format plus lisible, donc mon iPhone serait en mesure de l'interpréter.
Voici ce que mon JSON ressemblait, après l'application d'un peu de changements:
Avis de la
UpdateDateOriginal
champ, qui est la méthode par défaut que WCF écrit DateTimes, et le plus convivialUpdateDate
champ, que j'ai créé à l'aide du code ci-dessous.Mes lignes originales ressemblait à ceci:
... et voici les lignes à créer le plus convivial
UpdateDate
valeur JSON.En fait, vous pouvez trouver qu'il est plus utile de revenir
DateTime
valeurs en format ISO8601. Par exemple:Pour ce faire, il suffit d'utiliser mon code ci-dessus, mais le changement de la chaîne de
"MMM/dd/yyyy HH:mm"
à"s"
dans les deux endroits.Et, si vos valeurs DateTime sont stockés au format UTC, mais vous vouliez que votre services WCF pour renvoyer les valeurs dans la locale de l'utilisateur, le fuseau horaire, vous pouvez suivre mes conseils ici:
Obtenir DateTime dans les utilisateurs de fuseau horaire local
N'est pas la vie plus facile, avec quelques exemples simples !
2018-02-06T14:40:43.511Z
format DateTimeI
OriginalL'auteur Mike Gledhill
vous pouvez utiliser cette solution de contournement, Dans votre json définition de l'objet de
Dans évaluateur placez votre format personnalisé de la sérialisation
OriginalL'auteur tdelepine
Une façon est d'utiliser un module de formatage pour modifier la valeur par défaut
DataContractSerializer
comme décrit dans WCF Extensibilité – Message de Formatage.Une autre option est d'écrire une extension de la méthode de chargement de votre objet dans un flux et ensuite vous pouvez appliquer quelle que soit sérialiseur vous voulez l'objet. Voir la accepté de répondre pour Remplacer la valeur par défaut sérialiseur JSON dans WCF 4 à JSON.NET pour plus de détails sur la façon de le faire.
JavaScriptSerializer
avecDateTime
Vue. andrearegoli.wordpress.com/2014/09/11/json-serialization-c Peut-être à l'aide deDataContractJsonSerializer, JsonSerializer (ServiceStack) and JsonConvert (json.net)
. Tout monde réel de l'échantillon?OriginalL'auteur Karl Anderson
Cela ne résout pas votre problème de fuseaux horaires, mais je vais le poster ici pour d'autres qui sont en bagarre avec WCF, les tiques et DateTime.
Si vous ne voulez pas les tiques, mais lisible par l'homme, format de l'heure, vous pouvez le faire par l'introduction d'un supplément de
string
de la propriété. Puis c'est une question de jongler avec leDateTime
avant de mettre la valeur dans une chaîne.OriginalL'auteur Robotron