[Json.Net / Newtonsoft.Json] Sérialiser les propriétés en minuscule
Newtonsoft.Json est une librairie gratuite (également nommée Json.Net) qui permet entre autre de générer du JSON, de lire du JSON et de sérialiser des objets .net en Json.
Cette librairie est une merveille car elle vous simplifiera énormément la vie, d’autant plus qu’aujourd’hui avec les phablets, les smartphones et le Web “2.0” (et supérieur), le json est devenu le format d’échange de données entre moteur et interfaces graphiques.
Elle est complètement gratuite et disponible en téléchargement sur le site de CodePlex.
Voici une astuce qui vous permettra de sérialiser vos propriétés en forçant la mise en minuscule (lowercase).
Aujourd’hui, pour un nouveau projet dont je vous parlerai prochainement, j’ai été amené à utiliser la sérialisation de collections d’objets en utilisant la librairie Newtonsoft.
Le problème est que suivant les périphériques et les logiciels, les noms de propriétés peuvent ne pas être reconnus, notamment lorsqu’ils comportent des majuscules.
Il est heuresement possible de convertir automatiquement les noms de propriétés.
Ainsi la propriété “CouleurVoiture” sera sérialisée en “couleurvoiture”.
Pour cela, il suffit de coder son propre ContractResolver.
Voici la classe héritée de ContractResolver qui permet de forcer la sérialisation des propriétés en minuscule:
Public Class LowercaseContractResolver
Inherits DefaultContractResolver
Protected Overrides Function ResolvePropertyName(propertyName As String) As String
Return MyBase.ResolvePropertyName(propertyName).ToLower
End Function
End Class
Voici la classe héritée de ContractResolver qui permet de forcer la sérialisation des properties en majuscule:
Public Class UppercaseContractResolver
Inherits DefaultContractResolver
Protected Overrides Function ResolvePropertyName(propertyName As String) As String
Return MyBase.ResolvePropertyName(propertyName).ToUpper
End Function
End Class
Pour sérialiser vos objets, il suffit d’utiliser votre ContractResolver précédemment créé comme dans l’exemple suivant:
Public Sub TestSerialisation(ByVal monobject As Object)
Dim settings As New JsonSerializerSettings()
settings.ContractResolver = New LowercaseContractResolver()
Dim json As String = JsonConvert.SerializeObject(monobject, Formatting.Indented, settings)
End Sub
Petite information pratique: depuis le framework DotNet 4.0, il existe un ContractResolver natif nommé CamelCasePropertyNamesContractResolver qui permet de forcer la première lettre uniquement en minuscule.
Bonne sérialisation !