gpt4 book ai didi

c# - Json.NET,无法反序列化可为空的类型

转载 作者:IT王子 更新时间:2023-10-29 04:38:30 25 4
gpt4 key购买 nike

我正在尝试使用 Json.NET 将 JSON 转换为 C# 对象。该对象在 C# 中如下所示:

public class MyObject 
{
public int? integerValue {get;set;}
public DateTime? dateTimeValue {get;set;}
}

但是当我在传入的 JSON 上运行 JsonConvert.DeserializeObject() 时,出现以下异常:

Unable to find a constructor to use for type System.Nullable`1[System.Int32]. A class should either have a default constructor or only one constructor with arguments.

--- 编辑 ----

好吧,经过多次测试,问题归结为我的 JSON 输入是这样的:

{integerValue:{}, dateTimeValue: {} }

代替:

{integerValue: null, dateTimeValue: null}

事实证明,{} 是在 JSON 中表示空对象的有效方式,但 JSON.Net 解析器不知道在反序列化时以与“空”相同的方式处理 {} 标记。

感谢大家的参与!

最佳答案

错误告诉您它找不到可用于反序列化的构造函数。

尝试向类中添加默认构造函数:

public class MyObject
{
public int? integerValue { get; set; }
public DateTime? dateTimeValue { get; set; }

public MyObject(){}
}

帕特里克。

--编辑--

所以我刚刚使用您的 MyObject 创建了一个简单的控制台应用程序,无论是否使用默认构造函数,我都没有收到任何错误。这是我的例子:

class Program
{
static void Main(string[] args)
{
var mo = new MyObject { integerValue = null, dateTimeValue = null };
var ser = Newtonsoft.Json.JsonConvert.SerializeObject(mo);
var deser = Newtonsoft.Json.JsonConvert.DeserializeObject(ser, typeof(MyObject));
}
}

public class MyObject
{
public int? integerValue { get; set; }
public DateTime? dateTimeValue { get; set; }
}

我没有异常(exception)...

你能展示一个你试图反序列化的 JSON 的例子吗?

关于c# - Json.NET,无法反序列化可为空的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2157156/

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