我正在尝试反序列化我必须对我拥有的模型类进行的 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);
错误信息://innner 异常
无法从 System.String 转换或转换为 Test.Element。
我完全知道错误在我json
中传递string
时的状态,而在类中我有一个class
类型(发生不匹配)。
在这种情况下,我需要处理错误,如果输出不匹配,可能会放置一个 null,但它不应该抛出异常。
我尽力通过设置阅读文档和设置选项,但似乎都不起作用.
我正在使用 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);
此代码不会引发异常。设置对象中的Error
处理程序将被调用,如果引发异常的成员名为 "test"
并且属于 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);