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 ...
随机推荐
- 04.Android之动画问题
目录介绍 4.0.0.1 Android中有哪几种类型的动画,属性动画和补间动画有何区别?补间动画和属性动画常用的有哪些? 4.0.0.2 View动画为何不能真正改变View的位置?而属性动画为何可 ...
- C# OpenCv 证件照换底色
using OpenCvSharp; using System; using System.Collections.Generic; using System.Linq; using System.T ...
- Lab2:System Call
trace 该系统调用程序,可以跟踪其他的系统调用命令,该系统调用的形参为一个整数掩码.其具体实参为1 << sys_call所得到的整数值,sys_call是一个系统调用指令在内核中定义 ...
- 开源鸿蒙(OpenHarmonyOS)代码下载及编译
开源鸿蒙的代码仓在码云上,可以通过以下命令下载源码并编译 本机安装虚拟机 如本地已经安装可以忽略此步 安装指导:https://thoughts.teambition.com/share/614c49 ...
- 第十三届蓝桥杯大赛软件赛省赛【Java 大学B 组】试题C: 字符统计
1 import java.util.Scanner; 2 3 public class Main { 4 public static void main(String args[]) { 5 Sca ...
- #KMP,容斥,dp#洛谷 5770 [JSOI2016] 无界单词
题目传送门 分析 显然如果存在长度大于一半的border那么必然存在小于一半的 border,所以容斥一下, 设 \(dp[i]\) 表示长度为 \(i\) 的不存在公共前后缀的字符串个数,那么 \( ...
- #动态规划,组合计数,树状数组,前缀和#F 简单计数题&K 最简单的题
先膜两位出题人 F 简单计数题 题目 有\(n\)个活动,预约期有\(k\)天,第\(j\)天YC可以获得\(a_j(1\leq a_j\leq n)\)张预约券, 他会在\(n\)个活动中等概率选择 ...
- 本周四晚19:00知识赋能第八期第1课丨ArkUI框架整体设计
OpenAtom OpenHarmony(以下简称"OpenHarmony")开源开发者成长计划项目自 2021 年 10 月 24 日上线以来已经走过了7期,为开发者提供了一个良 ...
- C 语言结构体和枚举完全指南:成员访问、字符串操作、枚举基础
访问结构体成员 要访问结构体的成员,请使用点语法 (.): // 创建名为 myStructure 的结构体 struct MyStructure { int myNum; char myLetter ...
- 我为什么选择Wiki.js记笔记?
很长一段时间里,我都被困扰着,感觉陷入了笔记的泥潭,而积累的如此多的笔记也没有形成我自己的知识体系. 之前的记笔记方式 笔记的来源 微信公众号 技术博客 纸质书籍 官网文档 PDF 自己的零散想法 网 ...