簡體   English   中英

如何使用Newtonsoft.Json反序列化時忽略類型

[英]How to ignore type while Deserialization using Newtonsoft.Json

我試圖反序列化json數據,我必須與我的模型類

傑森:

"{'test':'1339886'}"

課程:

public class NewtonTest
    {
        public Element test { get; set; }
    }
public class Element
    {
        public string sample { get; set; }
    }

在主類:

//under Main
string jsonData =  "{'test':'1339886'}";
var  = JsonConvert.DeserializeObject<NewtonTest>(jsonData);

錯誤信息: //內在異常

無法從System.String轉換或轉換為Test.Element。“

我完全知道錯誤狀態,因為我在我的json中傳遞string ,因為在類中我有一個class作為類型(不匹配發生)。

在這種情況下,我需要處理錯誤,如果輸出不匹配,可能會置空,但不應拋出異常。

我嘗試通過設置閱讀文檔和設置選項,但似乎沒有任何工作。

我使用的是Newtonsoft.Json 4.5版

可以告訴JSON.NET忽略特定成員和類型的錯誤:

var settings = new JsonSerializerSettings
{
    Error = (sender, args) => 
    {
        if (object.Equals(args.ErrorContext.Member, "test") && 
            args.ErrorContext.OriginalObject.GetType() == typeof(NewtonTest))
        {
            args.ErrorContext.Handled = true;
        }
    }
};

NewtonTest test = JsonConvert.DeserializeObject<NewtonTest>(json, settings);

此代碼不會拋出異常。 將調用settings對象中的Error處理程序,如果拋出異常的成員名為"test"並且屬於NewtonTestNewtonTest跳過錯誤並且JSON.NET繼續運行。

ErrorContext屬性還有其他屬性,您可能希望利用這些屬性來僅處理您絕對確定要忽略的錯誤。

如果你想在使用格式錯誤的json數據時進行解決。 這是一個有效的簡單解決方案。

 public static class NewtonHelpers
{
    internal class NewtonHelper
    {
        public string test { get; set; }
    }

    public static NewtonTest BuildNewton(string jsonData)
    {
        var newtonHelper = JsonConvert.DeserializeObject<NewtonHelper>(jsonData);

        var newtonTest = new NewtonTest { test = { sample = newtonHelper.test } };

        return newtonTest;
    }
}

哪個可以用

var testdata = "{'test':'1339886'}";
var newNewton = NewtonHelpers.BuildNewton(testdata);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM