当前位置: 首页 > wzjs >正文

个人网站 wordpress福建住房和城乡建设部网站

个人网站 wordpress,福建住房和城乡建设部网站,做网站人才,wordpress 繁体转简使用 Source Generation 提升 System.Text.Json 性能 使用 Source Generation 提升 System.Text.Json 性能前言一、源生成的核心优势二、实现步骤1. 定义序列化上下文2. 序列化/反序列化 三、高级配置四、项目集成五、关键注意事项六、完整案例数据模型上下文定义使用示例 结语…

使用 Source Generation 提升 System.Text.Json 性能

  • 使用 Source Generation 提升 System.Text.Json 性能
    • 前言
    • 一、源生成的核心优势
    • 二、实现步骤
      • 1. 定义序列化上下文
      • 2. 序列化/反序列化
    • 三、高级配置
    • 四、项目集成
    • 五、关键注意事项
    • 六、完整案例
      • 数据模型
      • 上下文定义
      • 使用示例
    • 结语

使用 Source Generation 提升 System.Text.Json 性能

前言

在 C# 开发中,System.Text.Json 是处理 JSON 数据的主流方案。传统的反射式序列化虽然方便,但在高频调用AOT场景(如 iOS/Blazor WASM)中会遇到性能瓶颈。.NET 6+ 引入的 Source Generation(源生成) 技术,通过在编译时生成序列化代码,可显著提升性能。本文将详解其实现方式。


一、源生成的核心优势

特性反射方案源生成方案
启动速度首次调用需初始化反射元数据无运行时开销
AOT 支持不可用完全支持
序列化吞吐量约 1x约 1.5-2x
内存占用较高(反射缓存)低(编译时生成代码)

适用场景

  • 需要减少应用启动时间的服务
  • 移动端/WebAssembly 等 AOT 环境
  • 高频调用的 JSON API 接口

二、实现步骤

1. 定义序列化上下文

创建继承自 JsonSerializerContext 的分部类,并通过 [JsonSerializable] 注册类型:

[JsonSerializable(typeof(Product))]
[JsonSerializable(typeof(List<Product>))]
public partial class AppJsonContext : JsonSerializerContext
{// 源生成器自动填充实现
}

2. 序列化/反序列化

使用生成的 Default 实例进行高效操作:

// 序列化
var product = new Product { Id = 100, Name = "Keyboard" };
string json = JsonSerializer.Serialize(product, AppJsonContext.Default.Product);// 反序列化
Product? result = JsonSerializer.Deserialize(json, AppJsonContext.Default.Product);

三、高级配置

通过 [JsonSourceGenerationOptions] 定制行为:

[JsonSourceGenerationOptions(PropertyNamingPolicy = JsonKnownNamingPolicy.CamelCase,WriteIndented = true,DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull,NumberHandling = JsonNumberHandling.AllowReadingFromString)]
[JsonSerializable(typeof(Product))]
public partial class AppJsonContext : JsonSerializerContext
{
}

常用配置项

  • PropertyNamingPolicy: 命名策略(如 CamelCase)
  • WriteIndented: 是否美化输出
  • IgnoreNullValues: 空值忽略规则
  • Converters: 自定义类型转换器

四、项目集成

.csproj 中启用源生成:

<PropertyGroup><EnableSourceGenerator>true</EnableSourceGenerator>
</PropertyGroup>

注意:需安装 System.Text.Json 7.0+ 包


五、关键注意事项

  1. 类型可见性
    如果目标类型为 internal,需在 AssemblyInfo.cs 添加:

    [assembly: InternalsVisibleTo("YourAssemblyName")]
    
  2. 编译时验证
    所有被序列化的属性必须具有可访问的 getter/setter

  3. 集合类型
    建议直接注册 List<T> 而非 IEnumerable<T> 以提高性能


六、完整案例

数据模型

public class Product
{public int Id { get; set; }public string? Name { get; set; }public DateTimeOffset CreatedAt { get; set; }
}

上下文定义

[JsonSourceGenerationOptions(WriteIndented = true)]
[JsonSerializable(typeof(Product))]
public partial class ProductContext : JsonSerializerContext
{
}

使用示例

var products = new List<Product>
{new Product { Id = 1, Name = "Mouse", CreatedAt = DateTimeOffset.UtcNow },new Product { Id = 2, Name = "Monitor", CreatedAt = DateTimeOffset.UtcNow }
};// 序列化集合
string json = JsonSerializer.Serialize(products, ProductContext.Default.ListProduct
);// 输出结果
// [
//   {
//     "Id": 1,
//     "Name": "Mouse",
//     "CreatedAt": "2023-09-20T08:30:00+00:00"
//   },
//   ...
// ]

结语

源生成技术通过编译时生成优化代码,不仅提升了性能,还增强了 AOT 兼容性。对于追求极致性能的 .NET 应用,这是 JSON 处理的首选方案。建议在复杂DTO场景中优先采用此方案。


文章转载自:

http://oDxto8BY.fbLkr.cn
http://bsue4ph6.fbLkr.cn
http://i7gFf5n5.fbLkr.cn
http://jMr9j579.fbLkr.cn
http://ATYd1Umf.fbLkr.cn
http://3EUfY89n.fbLkr.cn
http://exDzMDSO.fbLkr.cn
http://C3TpxLeC.fbLkr.cn
http://nWPLa8a0.fbLkr.cn
http://himgFgrS.fbLkr.cn
http://GPHp8ykE.fbLkr.cn
http://KswMUjjH.fbLkr.cn
http://lSFyH4xs.fbLkr.cn
http://CYQ0LRSg.fbLkr.cn
http://LGG8MJ9P.fbLkr.cn
http://4zWEsamT.fbLkr.cn
http://7kag3Ez2.fbLkr.cn
http://fWGIyguv.fbLkr.cn
http://Uby6h8v0.fbLkr.cn
http://jbkhqm7a.fbLkr.cn
http://ozwmsDKh.fbLkr.cn
http://hfDjRybr.fbLkr.cn
http://lGDosnuf.fbLkr.cn
http://XEjjJSQz.fbLkr.cn
http://fVtv9mP3.fbLkr.cn
http://0Ue1FLnT.fbLkr.cn
http://bA4I2wxu.fbLkr.cn
http://1Qdmyu0T.fbLkr.cn
http://9Vw0GE8E.fbLkr.cn
http://Q4wO76Iq.fbLkr.cn
http://www.dtcms.com/wzjs/690255.html

相关文章:

  • 网站设计主色学校北京 代理前置审批 网站备案
  • 重庆网站建设求职简历网络文化经营许可证申请条件
  • 郑州建设银行网站为什么网站不见了
  • 网站建设客户确认单用老域名做网站还是新域名
  • 外贸推广网站网页制作学什么软件好
  • 郴州网站开发公司公司邮箱如何申请
  • 云建造网站网站做md5脚本
  • 大连百度网站快速优化网络服务部工作计划
  • 软件做网站 编程自己写网站建设的业务规划
  • js素材网站做代刷网站赚钱不
  • 莱芜手机网站设计公司最近几年做电影网站怎么样
  • wp如何做网站地图现在最流行的网站开发工具
  • 网站页脚需要放什么谷歌外贸网站
  • 传媒网站制作做网站去哪找客户
  • 长春网站建设方案推广家庭室内装修设计公司
  • 哪个网站财经做的最好电子商务网站中最基本的系统是
  • 客户端 网站开发 手机软件开发哪个软件是网页编辑软件
  • 一元云淘网站开发手机视频网站开发
  • 有没有专门发布毕业设计代做网站网站建设顾问站建
  • 神木自适应网站开发wordpress 开发商城
  • wordpress 建站插件个人简历样本
  • 企业怎么建网站网站商城建设费用
  • 网站建设及维护成本铁岭做网站哪家好
  • wordpress站点图标正能量不良网站推荐2020
  • 网站数据库怎么配置石家庄网站建设浩森宇特
  • 杭州网站建设手机版外包做网站
  • 九江市住房和城乡建设局官方网站织梦软件展示网站源码
  • 青岛网站推广服务租号网站开发
  • 网站建设方案交换认苏州久远网络网站动态页面怎么做
  • 建设银行海淀支行 网站商城站人工售票时间表