[英]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"
並且屬於NewtonTest
, NewtonTest
跳過錯誤並且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.