Maison >développement back-end >C++ >Comment sérialiser/désérialiser les propriétés JSON en tant que valeurs au lieu d'objets en C# ?
Sérialisation/désérialisation des propriétés JSON en tant que valeurs au lieu d'objets : un guide détaillé
Dans de nombreuses applications, les données sont représentées au format JSON pour un stockage et une transmission efficaces. Cependant, il arrive parfois que la représentation JSON par défaut ne corresponde pas au format souhaité. Cela peut être particulièrement vrai lorsqu'il s'agit de types de données personnalisés. Dans cet article, nous explorerons un problème rencontré par les programmeurs lors de la sérialisation/désérialisation de classes avec des propriétés de types de données personnalisés et comment le surmonter.
Énoncé du problème
Considérez le code suivant :
class Car { public StringId Id { get; set; } public string Name { get; set; } } class StringId { public string Value { get; set; } }
Lorsque nous essayons de sérialiser un objet de la classe Car, nous pouvons nous attendre au JSON suivant représentation :
{ "Id": "someId", "Name": "Ford" }
Cependant, le comportement par défaut dans JSON.NET entraîne une représentation différente :
{ "Id" : { "Value": "someId" }, "Name": "Ford" }
En effet, la propriété StringId est sérialisée en tant qu'objet au lieu d'un simple valeur.
Solution 1 : Utiliser un TypeConverter
Une façon de résoudre ce problème consiste à créer un TypeConverter pour la classe StringId. JSON.NET détectera et utilisera automatiquement ce convertisseur lors de la sérialisation/désérialisation d'objets. Voici comment implémenter un TypeConverter pour StringId :
[TypeConverter(typeof(StringIdConverter))] class StringId { public string Value { get; set; } } class StringIdConverter : TypeConverter { // Implementation of CanConvertFrom, CanConvertTo, ConvertFrom, and ConvertTo methods }
Ce TypeConverter permet à JSON.NET de convertir des objets StringId vers et depuis des chaînes.
Solution 2 : Utiliser un JsonConverter personnalisé
Une approche alternative consiste à utiliser un JsonConverter personnalisé. Cela offre plus de contrôle sur le processus de sérialisation/désérialisation. Voici comment implémenter un JsonConverter personnalisé pour StringId :
[JsonConverter(typeof(StringIdConverter))] class StringId { public string Value { get; set; } } class StringIdConverter : JsonConverter { // Implementation of CanConvert, ReadJson, and WriteJson methods }
Ce JsonConverter nous permet de spécifier précisément comment les objets StringId doivent être représentés dans JSON.
Considérations supplémentaires
Il est important de noter que les convertisseurs de types ne sont pris en charge que dans .NET Core pour JSON.NET 10.0.1 et versions ultérieures. Pour les anciennes versions, des JsonConverters personnalisés doivent être utilisés à la place.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!