web-dev-qa-db-fra.com

Comment gérer les valeurs nulles / vides dans JsonConvert.DeserializeObject

J'ai le code suivant:

return (DataTable)JsonConvert.DeserializeObject(_data, (typeof(DataTable)));

Ensuite, j'ai essayé:

var jsonSettings = new JsonSerializerSettings
{
    NullValueHandling = NullValueHandling.Ignore
};

return (DataTable)JsonConvert.DeserializeObject<DataTable>(_data, jsonSettings);

La ligne de retour renvoie l'erreur:

{"Erreur lors de la conversion de la valeur \"\"en type 'System.Double'."}

Beaucoup de solutions en ligne suggèrent de créer Class personnalisé avec des types nullables, mais cela ne fonctionnera pas pour moi. Je ne peux pas m'attendre à ce que le JSON soit dans un certain format. Je n'ai aucun contrôle sur le nombre de colonnes, le type de colonne ou les noms de colonnes.

44
Kyle

Vous pouvez fournir des paramètres à JsonConvert.DeserializeObject pour lui dire comment gérer les valeurs NULL, dans ce cas, et bien plus encore:

var settings = new JsonSerializerSettings
                    {
                        NullValueHandling = NullValueHandling.Ignore,
                        MissingMemberHandling = MissingMemberHandling.Ignore
                    };
var jsonModel = JsonConvert.DeserializeObject<Customer>(jsonString, settings);
123
Thomas Hagström

Vous pouvez vous abonner à l'événement 'Error' et ignorer les erreurs de sérialisation si nécessaire.

    static void Main(string[] args)
    {
        var a = JsonConvert.DeserializeObject<DataTable>("-- JSON STRING --", new JsonSerializerSettings
        {
            Error = HandleDeserializationError
        });
    }

    public static void HandleDeserializationError(object sender, ErrorEventArgs errorArgs)
    {
        var currentError = errorArgs.ErrorContext.Error.Message;
        errorArgs.ErrorContext.Handled = true;
    }
3
DotNetHitMan