Comment sérialiser un Dictionnaire dans le cadre de son objet parent à l'aide de Json.Net
Je suis en utilisant Json.Net pour la sérialisation.
J'ai une classe avec un Dictionnaire:
public class Test
{
public string X { get; set; }
public Dictionary<string, string> Y { get; set; }
}
Je peux en quelque sorte sérialiser cet objet pour récupérer le JSON suivants
{
"X" : "value",
"key1": "value1",
"key2": "value2"
}
où "key1", "key2" sont des clés dans le Dictionnaire?
Vous devez vous connecter pour publier un commentaire.
Si vous utilisez Json.Net 5.0.5 ou tard, et vous êtes prêt à changer le type de votre dictionnaire de
Dictionary<string, string>
àDictionary<string, object>
, puis un moyen facile d'accomplir ce que vous voulez est d'ajouter la[JsonExtensionData]
attribut à votre dictionnaire de la propriété comme ceci:Les clés et les valeurs de l'marqué dictionnaire pourront ensuite être sérialisé en tant que partie de l'objet parent. Le bonus est qu'il fonctionne sur la désérialisation ainsi: toutes les propriétés dans le JSON qui ne correspondent pas aux membres de la classe sera placé dans le dictionnaire.
Dictionary<string, object>
ouDictionary<string, JToken>
? Je voulais utiliserDictionary<string, string>
, donc un type très simple, mais j'obtiens une erreurDictionary<string, string>
. Donc, vous avez à utiliserDictionary<string, object>
ouDictionary<string, JToken>
, même si votre JSON contient uniquement des valeurs de chaîne. C'est juste la façon dont il fonctionne. Si vous voulez quelque chose d'autre, vous aurez besoin d'utiliser unJsonConverter
à la place.Mettre en œuvre JsonConverterclasse dérivée: la CustomCreationConverter classe doit être utilisée comme classe de base pour créer un objet personnalisé.
Projet de version du convertisseur (erreur de manipulation peut être améliorée, comme vous le souhaitez):
Code Client:
Veuillez noter: il y a un risque de collision entre les noms de propriété et les principaux noms du dictionnaire.
(JsonObjectContract)serializer.ContractResolver.ResolveContract(typeof(Test))
. L'utilisation de cette façon peut obtenir JsonPropertyAttribute valeurs.Vous pouvez créer ce convertisseur, puis l'affecter à votre propriété. A pris des morceaux de des solutions proposées.
Ensuite l'utiliser dans votre classe poco.