Disons que j'ai un document JSON qui ressemble à ceci: et j'ai quelques pocos C # qui ressemblent à ceci: p> est là un moyen d'avoir json.net désérialisaliser le document tel que la propriété Je ne peux pas changer la déclaration de < Code> DemandeLog code>, comme dans un package Nuget, je ne contrôle pas. J'ai examiné la création d'un convertisseur personnalisé, et il semble que cela devrait être possible, mais je suis complètement intercepté de la sorte de le retirer. P> p> demandelog.requestpayload code> de type
requierpayload code>, même si elle est déclarée
Object code>? L'objectif serait de revenir à
requierpAyload code> afin de le manipuler, comme celui-ci: p>
3 Réponses :
Dans votre Modifier: p> à: p> demande de demande code> classe,
var result = JsonConvert.DeserializeObject<RequestLog>(json, ...);
var requestPayload = result.RequestPayload;
// do other stuff with requestPayload here
Je ne peux pas; C'est dans un paquet Nuget, je ne contrôle pas.
Et pourquoi cela importerait-il? Si vous avez référencé, ça devrait aller.
@Chendunwachuku Contrôlez-vous la définition de demandeLog code>?
@ K.alanbates non je ne le fais pas. :(
Si vous devez déclarer cette requestPrayload CODE> Propriété du
DemandeLog code> sous forme d'objet code>, et que vous n'avez pas besoin de ce code pour être réutilisable, Vous pouvez brute la force cela.
JContainer json = GetMySerializedContentAsJson(content);
RequestPayload payload = JsonConvert.DeserializeObject<RequestPayload>(json["RequestPayload"]);
RequestLog log = JsonConvert.DeserializeObject<RequestLog>(json);
log.RequestPayload = payload;//=>you should now have your object.
Vous pouvez utiliser un convertisseur personnalisé pour votre DemandeLog CODE> Classe:
JsonConvert.DeserializeObject<RequestLog>(json, new JsonSerializerSettings
{
Converters = new JsonConverter[] { new RequestLogConverter() }
});
Merci! C'est exactement ce que j'espérais. :)
Pourquoi tapez-le comme
objet code> au lieu de
requierpayload code>?
@Amy honnêtement, je ne suis pas sûr. Je pense que c'est parce que
demandelog code> n'était vraiment pas destiné à être manipulé de cette façon, il est simplement censé être une DTO pour stocker des entrées de journalisation.
Si les classes désérialisées sont simples, créez peut-être une classe de copie que vous pouvez modifier. Puis automatiquement les récupérer sur les originaux.
@Chendunwachuku Vous pouvez utiliser "Dynamic" et les mettre à nouveau sur DemandPayload si vous ne pouvez pas l'affecter immédiatement.
@Chinmaykale Attention avec dynamique. L'exécution de la DLR est plus lente que l'exécution du CLR et tout ce qui touche n'importe quoi déclaré
dynamique code> passera par la DLR.