web-dev-qa-db-ja.com

JsonConvert.DeserializeObjectでnull /空の値を処理する方法

私は次のコードを持っています:

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

次に、私は試しました:

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

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

戻り行はエラーをスローしています:

{"値\"\"をタイプ 'System.Double'に変換中にエラーが発生しました。"}

Null可能な型を持つカスタムClassを作成することを提案するオンラインのソリューションがたくさんありますが、これはうまくいきません。 jsonが特定の形式になるとは期待できません。列数、列タイプ、または列名を制御することはできません。

44
Kyle

JsonConvert.DeserializeObjectに設定を指定して、null値の処理方法(この場合)などを伝えることができます。

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

「エラー」イベントにサブスクライブし、必要に応じてシリアル化エラーを無視できます。

    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