JSON反序列化.net Core 3

时间:2019-11-11 08:23:38

标签: json .net-core-3.0 system.text.json

这是真正的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

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

1 个答案:

答案 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