繁体   English   中英

JSON 反序列化 .net 核心3

[英]JSON Deserialize .net Core 3

这个真的很基本。 使用新的 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});
    }
}

但这样做
我只是得到 null 用于字符串和 0 用于 temp2 中的 Int

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

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

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

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

你会得到预期的 object 回来:

Id        1 
Name      Manas 
Address   India 

为什么?

System.Text.JSON 并不是像 JSON.NET 那样成为瑞士刀 JSON 解串器。 它的主要用例是 HTTP API 场景中的快速 DTO 序列化,分配最少,并且 DTO 使用属性。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM