json - JSON反序列化.net Core 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});
}
}
但这样做
我只是得到 null 为 Strings 和 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;}
}
你会得到预期的对象:
Id 1
Name Manas
Address India
为什么?
System.Text.JSON 并不是像 JSON.NET 那样成为瑞士刀 JSON 反序列化器。它的主要用例是 HTTP API 场景中的快速 DTO 序列化,分配最少,并且 DTO 使用属性。
属性不仅仅是带有 getter 和 setter 的字段,它们是对象接口的一部分。另一方面,即使字段是公开的,它们也会被视为内部状态。序列化程序默认使用属性,字段序列化是可选功能。
也就是说,值元组。现在这是一种基本类型,它使用字段来提高性能并减少复制。元组在 DTO 中占有一席之地,但当前的 System.Text.Json 无法处理它们。
这方面的工作已经在进行中,已经有一个 PR 正在审核中,但目标版本是 5.0
推荐阅读
- angular - HostListener 'scroll' 事件未触发,但 'mouseenter' 事件正常
- c - 获取 c 核心转储错误并尝试获取随机整数
- entity-framework - 我正在尝试使用 Oracle 数据库在 Entity Framework .NET 中使用数据库优先方法
- python - 如何从 JSON 对象中提取元素
- osgi - 如何在 Apache Felix Web 控制台中启用组件页面
- python - 如何检查表是否存在变量
- azure - 在 Azure 数据湖中保留 .csv 格式的方法
- r - 数据框中的 NA 值
- angular - 无法读取未定义角度 6 *ngIf 问题的属性
- sql - 如何在sql中获得选择性计数