dotnet 6 修复在 System.Text.Json 使用 source generation 源代码生成提示 SYSLIB1032 错误
在 dotnet 6 内置了通过源代码生成的方式进行序列化 JSON 对象,性能非常高。使用的时候需要将 Json 序列化工具类换成 dotnet 运行时自带的 System.Text.Json 进行序列化,再加上一个继承 JsonSerializerContext 的辅助类型,且在此类型标记 JsonSerializableAttribute 特性,将此类型传入序列化和反序列化即可完成对接。然而在使用的过程中,如果发现此辅助类型的实际代码没有生成,且输出提示 SYSLIB1032 警告,那可能就是此辅助类型没有写对导致
如官方文档的对 SYSLIB1032 的描述,这是由于标记了 JsonSerializableAttribute 的类型没有写上 partial 关键词,导致了源代码生成无法通过分部类生成代码,从而失败
也因为源代码生成由于没有 partial 关键词,生成代码失败,从而导致了辅助类型没有实现 JsonSerializerContext 的方法,从而给出以下错误
- error CS0534: 不实现继承的抽象成员“JsonSerializerContext.GeneratedSerializerOptions.get”
- error CS0534: 不实现继承的抽象成员“JsonSerializerContext.GetTypeInfo(Type)”
- error CS7036: 未提供与“JsonSerializerContext.JsonSerializerContext(JsonSerializerOptions?)”的必需形参“options”对应的实参
大家可别被以上的错误给迷惑了哦,这三个错误都是由于 SYSLIB1032 警告的描述,源代码没有生成,从而让辅助类型没有实现 JsonSerializerContext 的方法
解决方法也如官方文档所述,给辅助类型加上 partial 关键词即可
额外的,如果给辅助类型加上 partial 关键词之后,依然提示 SYSLIB1032 错误,还需要检查一下,是否此辅助方法放在其他类型里面。是其他类型的内部类。如果是内部类,那就需要将外部的类,一条龙全部加上 partial 关键词才可以。否则源代码生成将无法创建代码
例如以下代码,在 Program 类型里面,包含了 MyJsonContext 这个辅助类型,即使在 MyJsonContext 类型上面加上 partial 关键词,然而由于 Program 类型没有加上 partial 关键词,源代码依然失败
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Text.Json.Serialization.Metadata;
namespace GemjabemrawWohearcebola;
internal class Program
{
[JsonSerializableAttribute(typeof(WeatherForecast))]
internal partial class MyJsonContext : JsonSerializerContext
{
}
}
修复方法就是给外部的类,一条龙全部加上 partial 关键词,如以下代码
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Text.Json.Serialization.Metadata;
namespace GemjabemrawWohearcebola;
internal partial class Program
{
[JsonSerializableAttribute(typeof(WeatherForecast))]
internal partial class MyJsonContext : JsonSerializerContext
{
}
}
dotnet 6 修复在 System.Text.Json 使用 source generation 源代码生成提示 SYSLIB1032 错误的更多相关文章
- ABP微服务学习系列-修复System.Text.Json不支持序列化Exception
前面我们已经把服务都启动了,然后我们试试请求API.发现请求出现500 返回错误 System.NotSupportedException: Serialization and deserializa ...
- .NET Core 3.0 System.Text.Json 和 Newtonsoft.Json 行为不一致问题及解决办法
行为不一致 .NET Core 3.0 新出了个内置的 JSON 库, 全名叫做尼古拉斯 System.Text.Json - 性能更高占用内存更少这都不是事... 对我来说, 很多或大或小的项目能少 ...
- 【译】System.Text.Json 的下一步是什么
.NET 5.0 最近发布了,并带来了许多新特性和性能改进.System.Text.Json 也不例外.我们改进了性能和可靠性,并使熟悉 Newtonsoft.Json 的人更容易采用它.在这篇文章中 ...
- [译]试用新的System.Text.Json API
译注 可能有的小伙伴已经知道了,在.NET Core 3.0中微软加入了对JSON的内置支持. 一直以来.NET开发者们已经习惯使用Json.NET这个强大的库来处理JSON. 那么.NET为什么要增 ...
- 从 Newtonsoft.Json 迁移到 System.Text.Json
一.写在前面 System.Text.Json 是 .NET Core 3 及以上版本内置的 Json 序列化组件,刚推出的时候经常看到踩各种坑的吐槽,现在经过几个版本的迭代优化,提升了易用性,修复了 ...
- 使用System.Text.Json处理Json文档以及部分坑
System.Text.Json处理Json文档需要用到JsonDocument,JsonElement,JsonProperty. JsonDocument就是一个表示Json文档的东西,JsonE ...
- 在.Net Core 3.0中尝试新的System.Text.Json API
.NET Core 3.0提供了一个名为System.Text.Json的全新命名空间,它支持reader/writer,文档对象模型(DOM)和序列化程序.在此博客文章中,我将介绍它如何工作以及如何 ...
- .netcore3.0 System.Text.Json 日期格式化
.netcore3.0 的json格式化不再默认使用Newtonsoft.Json,而是使用自带的System.Text.Json来处理. 理由是System.Text.Json 依赖更少,效率更高. ...
- In .net 4.8,calculate the time cost of serialization in BinaryFormatter,NewtonSoft.json,and System.Text.Json.JsonSerializer.Serialize
using ConsoleApp390.Model; using Newtonsoft.Json; using System; using System.Collections.Generic; us ...
- C# Serialization performance in System.Runtime.Serialization.Formatters.Binary.BinaryFormatter,Newtonsoft.Json.JsonConvert and System.Text.Json.JsonSerializer.Serialize
In .net core 3.0 using System;using System.Collections.Generic;using System.Collections;using System ...
随机推荐
- 记录--TS类型写不好?一起来训练提升吧!
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前期准备 本篇文章的编写目的是为了提升TS类型的书写质量,高质量的类型可以提高项目的可维护性并避免一些潜在的漏洞; 在学习本篇之前需要有一 ...
- 记录--手把手带你开发一个uni-app日历插件(并发布)
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 相信我们在开发各类小程序或者H5,甚至APP时,会把uni-app作为一个技术选型,其优点在于一键打包多端运行,较为强大的跨平台的性能.但 ...
- FFmpeg开发笔记(五)更新MSYS的密钥环
<FFmpeg开发实战:从零基础到短视频上线>一书提到:使用MSYS对FFmpeg进行交叉编译时,需要事先安装交叉编译工具链,也就是执行下面命令. pacman -S mingw-w6 ...
- Win10下安装Maven 配置环境变量 设置settings
一.下载.设置环境变量 下载页面:https://maven.apache.org/download.cgi 下载地址:https://mirrors.tuna.tsinghua.edu.cn/apa ...
- Java内存马2-Spring内存马
Spring内存马 目录 Spring内存马 1.Spring&Spring MVC简介 2.环境搭建 3.Controller内存马 4.踩坑日记 5.Interceptor内存马 1.Sp ...
- Lab1:Xv6 and Unix utilities
Sleep功能 通过接受时间参数,调用system_call 指令 sleep实现该功能 #include "kernel/types.h" #include "kern ...
- FR常用正则表达式
禁止输入中文字符 ^[^\u4e00-\u9fa5]{0,}$
- NET Core使用Grpc通信(一):一元
gRPC是一个现代的开源高性能远程过程调用(RPC)框架,它可以高效地连接数据中心内和跨数据中心的服务,支持负载平衡.跟踪.运行状况检查和身份验证. gRPC通过使用 Protocol Buffers ...
- 第十三届蓝桥杯大赛软件赛省赛【Java 大学B 组】试题D: 最少刷题数
1 import java.util.ArrayList; 2 import java.util.Scanner; 3 4 public class Main { 5 public static vo ...
- 面试官:如何搭建Redis集群?
Redis 集群(Redis Cluster)是 Redis 3.0 版本推出的 Redis 集群方案,它将数据分布在不同的服务区上,以此来降低系统对单主节点的依赖,并且可以大大的提高 Redis 服 ...