Comment par défaut null JSON propriété à un tableau vide lors de la sérialisation avec une Liste<T> propriété dans JSON.NET?
Actuellement, j'ai JSON qui vient soit via un appel HTTP ou est stocké dans une base de données, mais lorsque le serveur de transformation, ils sont mappés aux objets C#.
Ces objets ont des propriétés comme public List<int> MyArray
.
Lorsque le JSON contient MyArray:null
je veux que la résultante de la propriété d'être un vide List<T>
au lieu de null List<T>
propriété.
L'objectif est que l'objet se "reserialize" JSON comme MyArray:[]
, ainsi, soit de l'enregistrer sur la base de données ou de répondre via HTTP comme un tableau vide au lieu de null
.
De cette façon, n'importe quoi, la classe C# est, fondamentalement, de l'épuration et l'application d'un tableau vide pour tout List<T>
propriété qui serait autrement null
et causer des choses à la rupture dans le navigateur de code côté (par exemple: cannot read property 'length' of null
).
Est-il une manière que, lors de la sérialisation/désérialisation je peut avoir n'importe quelle valeur null qui est associé à un List<T>
bien devenir un tableau vide à la place?
OriginalL'auteur MetaGuru | 2014-08-05
Vous devez vous connecter pour publier un commentaire.
Vous pouvez toujours lazy load une liste vide si sa valeur null.
OU
Utiliser le NullValueHandling option sur la JsonDeserializer.
http://james.newtonking.com/json/help/index.html?topic=html/SerializationSettings.htm
OriginalL'auteur jtimperley
J'allais suggérer à l'aide d'un custom
JsonConverter
pour résoudre ce problème, mais un convertisseur sera pas appelée pour les valeurs null. Au lieu de cela, vous aurez besoin d'utiliser unIContractResolver
en combinaison avec une mesureIValueProvider
. Voici le code que vous auriez besoin (inspiré par cette réponse):Voici une démo qui montre comment utiliser le solveur:
De sortie:
Vous êtes-- vous devez définir
ObjectCreationHandling
àReplace
pour l'aller-retour pour fonctionner correctement. J'ai modifié ma réponse. Voici un violon pour prouver qu'il fonctionne une fois que ce paramètre est ajouté: dotnetfiddle.net/wsEyzeCool, merci! J'ai pensé que j'étais fou à l'origine, jusqu'à ce que j'ai essayé votre code verbatim et a ensuite tenté l'aller-retour. Très apprécié
OriginalL'auteur Brian Rogers
À utiliser Brian Rogers solution dans un .net solution de base vous avez besoin d'une légère modification pour accéder à la "IsGenericType" de la propriété comme il a quitté Type de TypeInfo.
La réponse comme correcte (réglage NullValueHandling) n'a pas de travail pour moi, il ignore la propriété si elle est nulle.
Code complet pour .net de base:
OriginalL'auteur Dan Pettersson
La propriété suivante sera vide collection attribuées après la désérialisation au lieu de
null
dans les deux cas: lorsque la propriété est omis dans JSON ou lorsque la valeurnull
explicitement:OriginalL'auteur Ed'ka