我正在尝试反序列化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。“
我完全知道错误在我的string
中传递json
时的错误状态,因为我在类{i}中有class
类型(发生不匹配)。
在这种情况下,我需要处理错误,如果输出不匹配,可能会置空,但不应该抛出异常。
我尽力阅读文档并通过settings设置选项,但似乎都没有。
我使用的是Newtonsoft.Json的4.5版本
答案 0 :(得分: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继续运行。< / p>
ErrorContext
属性还有其他属性,您可能希望仅用于处理您绝对确定要忽略的错误。
答案 1 :(得分:0)
如果你想在使用格式错误的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);