JSON反序列化.net核心3



这个是真正的Basic。使用新的System.Text.Json对字符串进行反序列化;

namespace test
{
struct CI {
public int Id;
public string Name;
public string Address;
}
public class test{
var userlist = "{"Id":1,"Name":"Manas","Address":"India"}";
var temp2 = JsonSerializer.Deserialize<CI>(userlist,new JsonSerializerOptions { AllowTrailingCommas = true});
}
}

但这样做
在temp2 中,字符串为null,Int为0

这一定很简单,但我不明白

System.Text.Json不支持字段序列化。该功能计划用于.NET 5.0。

您使用了公共字段而不是公共属性。如果您尝试使用属性和完全相同的代码:

struct CI {
public int Id {get;set;}
public string Name {get;set;}
public string Address {get;set;}
}

你会得到预期的对象:

Id        1 
Name      Manas 
Address   India 

为什么

System.Text.JSON并不意味着像JSON.NET那样是一个Swiss Knight JSON反序列化器。它的主要用例是在HTTP API场景中以最小的分配进行快速DTO序列化,DTO使用属性。

属性不仅仅是带有getter和setter的字段,它们也是对象接口的一部分。另一方面,字段被视为内部状态,即使它们是公共的。默认情况下,序列化程序使用属性,字段序列化是可选功能。

也就是说,值元组。这现在是一种基本类型,它使用字段来提高性能并减少复制。元组在DTO中有其位置,但当前的System.Text.Json无法处理它们。

这方面的工作已经在进行中,已经有一个PR正在审查中,但目标版本是5.0

最新更新