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# ?

Comment sérialiser/désérialiser les propriétés JSON en tant que valeurs au lieu d'objets en C# ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-28 11:24:33541parcourir

How to Serialize/Deserialize JSON Properties as Values Instead of Objects in 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn