这是真正的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中,我只为String获得null,为Int获得0
这一定很简单,但是我不明白
答案 0 :(得分:1)
System.Text.Json doesn't support field serialization。该功能计划在.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一样是瑞士刀式JSON反序列化器。它的主要用例是在HTTP API场景中以最小的分配进行快速DTO序列化,并且DTO使用属性。
属性不仅仅是具有getter和setter的字段,它们还是对象接口的一部分。另一方面,即使字段是公共的,也被视为内部状态。默认情况下,序列化程序与 properties 一起使用,而字段序列化是一项可选功能。
也就是说,值元组 。现在这是一种基本类型,它使用字段来提高性能并减少复制。元组在DTO中占有一席之地,但是当前的System.Text.Json无法处理它们。
Work is already well under way for this,已经在审查PR,但目标版本是5.0