如何使用Newtonsoft.Json反序列化时忽略类型

sup*_*ool 5 c# json.net asp.net-mvc-4

我试图反序列化json数据,我必须与我的模型类

杰森:

"{'test':'1339886'}"
Run Code Online (Sandbox Code Playgroud)

课程:

public class NewtonTest
    {
        public Element test { get; set; }
    }
public class Element
    {
        public string sample { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

在主类:

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

错误信息: //内在异常

无法从System.String转换或转换为Test.Element."

我完全知道错误的含义,因为我在课堂上传递string了我的类型(不匹配发生).jsonclass

在这种情况下,我需要处理错误,如果输出不匹配,可能会置空,但不应抛出异常.

我尝试通过设置阅读文档和设置选项,但似乎没有任何工作.

我使用的是Newtonsoft.Json 4.5版

And*_*ker 7

可以告诉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);
Run Code Online (Sandbox Code Playgroud)

此代码不会抛出异常.Error设置对象中的处理程序将被调用,如果抛出异常的成员被命名"test"并且属于NewtonTest,则跳过错误并且JSON.NET继续运行.

ErrorContext属性还有其他属性,您可能希望仅用于处理您绝对确定要忽略的错误.