Personnalisé à l'aide de la Désérialisation Json.NET
J'ai une classe
public class Order
{
public int Id { get; set; }
public string ShippingMethod { get; set; }
}
et je veux désérialiser un JSON données ci-dessous dans la classe ci-dessus/objet
string json = @"{
'Id': 1,
'ShippingMethod': {
'Code': 'external_DHLExpressWorldwide',
'Description': 'DHL ILS Express Worldwide'
}
}";
Mon idée est que ShippingMethod
en JSON est un objet, mais je veux juste passer à ShippingMethod.Code
(en JSON) qui va passer dans ShippingMethod
comme string
dans Order
classe lors de la désérialisation.
comment puis-je atteindre cet objectif à l'aide de Json.NET?
Je crois que je peux accomlish à l'aide de CustomJsonConverter. Mais je m'embrouille. L'exemple de la doc juste pour WriteJson
, mais pas ReadJson
.
Donc
Vous avez juste besoin d'avoir "Id" et "Code" au même niveau?
Ouais, c'est mon problème et ce que je veux accomplir
Voir ma façon de mapper stackoverflow.com/questions/40439290/...
Code
et Description
sont à l'intérieur de ShippingMethod
? Comment sont sérialisés?Vous avez juste besoin d'avoir "Id" et "Code" au même niveau?
Ouais, c'est mon problème et ce que je veux accomplir
ShippingMethod
est objet en json et chaîne en C# de la classe. Comment vous pouvez mapper ce. Vous devez modifier le code comme ci-dessous.Voir ma façon de mapper stackoverflow.com/questions/40439290/...
OriginalL'auteur Habibillah | 2016-11-05
Vous devez vous connecter pour publier un commentaire.
Je viens de résoudre mon problème en utilisant
JsonConverter
comme je l'ai mentionné dans ma question. Ci-dessous mon code complet:OriginalL'auteur Habibillah
Désérialiser l'objet dynamique, puis remplir le
Order
objet en accédant à la dynamique des propriétés de l'objetMerci pour votre réponse, mais il ne convient pas si il y a un autre propriétés
Vous n'avez pas de dire qu'il y a plus de propriétés à gérer. Pour résoudre ce problème, vous pouvez ajouter une Extension de la méthode que de la carte une fois et ensuite vous pouvez l'utiliser partout où vous voulez. Mais vous avez également la solution semble ok, juste pour beaucoup de ligne de code fortwo propriétés (à mon avis)
Oui, là, regardez beaucoup de code, mais dans la vraie parole il sera garder votre modèle propre.
OriginalL'auteur Tinwor
Vous pouvez utiliser
JsonProperty
etJsonIgnore
attributs de diriger le processus de désérialisation, de Sorte que votre modèle peut être:Je n'ai pas aimé votre réponse, trop, trop lourd pour une simple chose, Mais comme mon respect pour votre opinion, j'ai posté une version simplifiée de ma réponse..
Pas de soucis :). La question est simple de penser, mais mon vrai mot, avec beaucoup de bien et de mal json schema, il vaut vraiment la peine. Exemple. enregistrement d'une commande, vous devez passer à la chaîne, mais pour obtenir de détail de commande, vous avez un objet. Et beaucoup plus
Je serais en désaccord c'est un hack. JsonIgnore est conçu pour ce genre de but - cela signifie que vous n'avez pas à re-écrire la sérialisation. Sans doute, il nous manque un certain contexte pour expliquer pourquoi ce n'est pas adapté pour l'OP.
OriginalL'auteur L.B