c# - 使用 System.Text.Json.Serialization 解析 json 的异常
问题描述
我的示例代码非常简单:
using System.Text.Json.Serialization;
using Newtonsoft.Json;
public class C {
public C(string PracticeName) { this.PracticeName = PracticeName; }
public string PracticeName;
}
var x = new C("1");
var json = JsonConvert.SerializeObject(x); // returns "{\"PracticeName\":\"1\"}"
var x1 = JsonConvert.DeserializeObject<C>(json); // correctly builds a C
var x2 = System.Text.Json.Serialization.JsonSerializer.Parse<C>(json);
最后一行提出:
抛出异常:System.Text.Json.dll 中的“System.NullReferenceException”对象引用未设置为对象的实例。
我究竟做错了什么 ?
(注意这是最新的 .NET Core 3 预览版 5 和最新的 System.Text.Json 4.6.0-preview6.19259.10)
添加无参数构造函数可以防止异常,但是我不想要/不需要无参数构造函数,并且 Json.Net 在没有它的情况下解析得很好。
有没有办法让 System.Text.Json 像 Json.Net 一样使用给定的构造函数进行解析?
解决方案
在目前的状态下,.NET Core 3.0中的 JSON 支持还没有完成,而且似乎只支持无参数的构造函数。将来可能会添加该功能。
当您想使用 .net 框架中的新 Json API 时,一种解决方法是为您的序列化模型创建一个无参数构造函数。可能我们根本不应该对普通的数据传输对象使用构造函数,因此我认为它是一种选择,而不是一种解决方法。
如果您寻找一种方法,关于如何从旧版本迁移到 .net core 3.0,或者Newtonsoft.Json
无论如何使用,这里记录了这一点:
MVC:
安装Microsoft.AspNetCore.Mvc.NewtonsoftJson
包,并将其注册到您的服务:
services.AddMvc().AddNewtonsoftJson();
信号:
安装Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson
包
//Client
new HubConnectionBuilder()
.WithUrl("/chatHub")
.AddNewtonsoftJsonProtocol(...)
.Build();
//Server
services.AddSignalR().AddNewtonsoftJsonProtocol(...);
这样,您应该* 能够在 .Net Core 3.0 中使用 Json.NET 功能
*我没有安装,所以无法测试
推荐阅读
- python - ValueError:无法查询“用户名”:必须是“用户”实例
- amazon-web-services - 检查 Route 53 Alias 记录映射到 ELB 的 URL 的命中次数
- c# - linq 减去列表中的数字
- django - 如何使用基于类的自定义验证器在 Django 中即时验证 CSV 文件上传?
- mysql - 查询数据以及mysql中有多少行有该日期
- javascript - react js功能组件中的条件渲染
- regex - 正则表达式查找正则表达式的多个外观
- javascript - 当涉及 JS 库时,如何查找哪个 Javascript 函数正在操作特定的 DOM 元素
- python - 如何在 Python 中从 S3 存储桶访问数据集?
- amazon-web-services - AWS Glue 开发终端节点无法正常工作