[Json.Net / Newtonsoft.Json] Sérialiser les propriétés en minuscule

json dotnet

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 !

Leave a Reply

Your email address will not be published. Required fields are marked *