IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[JSON Serialiser] => DateTime dans une propriété de type object est déserialisée en string


Sujet :

C#

  1. #1
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 063
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 063
    Points : 420
    Points
    420
    Par défaut [JSON Serialiser] => DateTime dans une propriété de type object est déserialisée en string
    Bonjour @ tous,

    Tout est dans le titre.
    J'ai un objet avec une propriété de type "object".
    C'est pour être générique, dedans, je peux mettre n'importe quel type de donnée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private _Valeur As Object
    Je le sérialise avec DataContractJsonSerializer , OK, ça donne ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    			}, {
    				"Desc": "Date ouverture",
    				"Id": "DatOuverture",
    				"Mode": 0,
    				"Valeur": "\/Date(1482966000000+0100)\/"
    			}, {
    Seulement, lorsque je le désérialize, il me le transforme en string:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Valeur = "\/Date(1482966000000+0100)\/"
    J'ai mis en true "AlwaysTransmitTypeInformation", mais ça ne change rien, il ne met pas le type "DateTime", mais celui de la classe contenante ("__type": "tblFiltreChamp:#EspBTP_D",).
    Lorsque j'écris la valeur dans la propriété, je la caste bien, j'ai regardé, le du sérialize, la propriété est bien de type DateTime.

    Est ce que quelqu'un a une idée ?

    Merci d'avance.
    David.

  2. #2
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 063
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 063
    Points : 420
    Points
    420
    Par défaut
    Je n'ai pas précisé, mais je suis en FrameWork 4.0.

    Je suis arrivé à faire quelque chose avec un IDataContractSurrogate:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        Public Function GetDeserializedObject(obj As Object, targetType As Type) As Object Implements IDataContractSurrogate.GetDeserializedObject
            If ((targetType = GetType(tblFiltreChamp)) AndAlso (CType(obj, tblFiltreChamp).Valeur IsNot Nothing)) Then
                If (CType(obj, tblFiltreChamp).Valeur.ToString().StartsWith("/Date(")) Then
                    Dim strTmp As String = CType(obj, tblFiltreChamp).Valeur.ToString().Substring(6)
                    Dim tmp As Long = 0
                    If (Long.TryParse(strTmp.Substring(0, strTmp.Length - 7), tmp)) Then
                        CType(obj, tblFiltreChamp).Valeur = New DateTime(tmp)
                    End If
                End If
            End If
            Return obj
        End Function
    Ce n'est pas super propre, mais ça me dépanne pour le moment.

    Mais par contre, la date n'est pas bonne, est ce que le Ticks a une règle particulière ? (je m'en fiche de l'heure).
    David.

  3. #3
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 063
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 063
    Points : 420
    Points
    420
    Par défaut
    Bion, pour les dates, fallait juste connaitre la règle..
    http://stackoverflow.com/questions/1...eserialization
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
        ''' <summary>Convertir une date Json ("\/Date(1483457729360+0100)\/") en DateTime</summary>
        Public Shared Function DateJsonToDateTime(JsonDate As String) As DateTime?
            ' JavaScript uses the unix epoch of 1/1/1970. Note, it's important to call ToLocalTime() after doing the time conversion, otherwise we'd have to deal with daylight savings hooey.
            Dim unixEpoch As DateTime = New DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)
            Dim startMilliseconds As Double = 0
            If ((JsonDate.Length > 20) AndAlso (Double.TryParse(JsonDate.Substring(6, 13), startMilliseconds))) Then
                Dim startTime As DateTime = unixEpoch.AddMilliseconds(startMilliseconds).ToLocalTime()
                Return startTime
            End If
            Return Nothing
        End Function
    David.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SP-2010] problème de formule de date dans colonne de type "valeur calculée"
    Par francis.richter dans le forum SharePoint
    Réponses: 3
    Dernier message: 15/06/2011, 16h49
  2. [PDO] Type date dans bindParam()
    Par eric.pommereau dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 25/06/2009, 15h35
  3. [ADO] Passage de paramètre de type Date dans une requête
    Par e-ric dans le forum Bases de données
    Réponses: 6
    Dernier message: 25/01/2006, 12h36
  4. Ajouter un champs de type " Date " dans ma base ac
    Par hysteresis dans le forum Langage SQL
    Réponses: 16
    Dernier message: 10/10/2005, 16h10
  5. insertion d'un type date dans une table access
    Par monstour dans le forum ASP
    Réponses: 7
    Dernier message: 18/06/2004, 16h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo