gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 22:58:19 25 4
gpt4 key购买 nike

我正在尝试反序列化关于我拥有的模型类的 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 作为类型(发生不匹配)。

在这种情况下,我需要处理错误,如果输出不匹配,我可能会放置一个空值,但它不应该抛出异常。

我尽最大努力通过 settings 阅读文档和设置选项但似乎都不起作用。

我使用的是 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 属性还有其他属性,您可能希望利用这些属性来仅处理您绝对确定要忽略的错误。

关于c# - 如何在使用 Newtonsoft.Json 反序列化时忽略类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30891738/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com