J'ai une recherche chaîne JSON quelque chose comme ceci:Json.Net désérialisation, en gardant certaines propriétés desordre
{
"Bar": {
"Pressure":42,
"ServesDrinks":false
},
"Baz":[
{
"Pressure":9001,
"ServesDrinks":true
},
{
"Pressure":0,
"ServesDrinks":false
}
]
}
Et je voudrais désérialiser cela en une classe regardant quelque chose comme ceci:
public class Foo
{
public Bar Bar { get; set; }
/// <summary>
/// Raw serialized (un-de-serialized) json string of the Baz list
/// </summary>
public string Baz { get; set; }
}
Fondamentalement, ne pas dé-sérialiser la valeur de Baz et au lieu de stocker la chaîne brute. I.e. Je veux que la valeur de chaîne Baz
après sérialisation être:
"[{\" \ pression ": 9001, \" ServesDrinks \ ": true}, {\" \ pression ": 0, \" ServesDrinks \ ": false}]"
J'utilise Json.Net mais je n'ai pas réussi à comprendre comment faire cela. Dans le cas idéal je voudrais juste mettre un attribut magique sur ma propriété Baz
qui conserve le json brut.
Je l'ai vu une question similaire ici: Partially deserialize with JSON.NET, keeping some fields raw
Mais je ne comprends pas comment aller avec cette approche JObject
.
(Si elle est de toute aide, je sais que les données que je veux retenir une liste)
Thankful pour toute aide!
L'autre question suggère de changer le champ Baz en 'JObject', qui est un type générique pour représenter les objets JSON. Vous pouvez obtenir la chaîne JSON avec 'Baz.ToString()', et lui assigner 'JObject.parse (aJSONString)'. –
Merci Jakub, mais je n'arrive pas à faire fonctionner ça. Je reçois une exception JsonReaderException: "Erreur lors de la lecture de la chaîne: jeton inattendu: StartArray. Chemin d'accès" Baz ", ligne 1, position 8." –
Vous pouvez essayer 'JArray' à la place. J'ai regardé un peu la documentation JSON.Net, et il semble que 'JArray' est utilisé pour gérer les tableaux JS, et' JObject' ne fonctionne qu'avec les vrais objets JS ('{foo: ...}'). J'ai donné une réponse plus complète ci-dessous. –