日本xxxx18视频在线观看-日本xxxx1819-日本xxxwww在线观看-日本xxx-日本xx-日本www在线视频

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

5步掌握System.Text.Json:ASP.NET Core Web API中的高效JSON處理

admin
2025年3月22日 7:58 本文熱度 362

在現(xiàn)代軟件開發(fā)中,JSON(JavaScript Object Notation)作為一種輕量級的數(shù)據(jù)交換格式,被廣泛應(yīng)用于前后端交互、配置文件管理以及分布式系統(tǒng)間的數(shù)據(jù)傳輸。System.Text.Json 是 .NET Core 3.0 及更高版本中引入的高性能 JSON 處理庫,提供了序列化和反序列化的功能,并且與 .NET 平臺深度集成, 在 ASP.NET Core Web API 中是默認的 JSON 序列化和反序列化庫 ,用于處理 HTTP 請求和響應(yīng)中的 JSON 數(shù)據(jù)。

1. 配置 System.Text.Json

在 ASP.NET Core 項目中,可以通過 Startup.cs 或 Program.cs 配置 System.Text.Json 的行為。以下是一些常見的配置選項:

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers()
        .AddJsonOptions(options =>
        {
            // 配置 JSON 序列化選項
            options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase; // 使用駝峰式命名
            options.JsonSerializerOptions.WriteIndented = true// 格式化輸出
            options.JsonSerializerOptions.Encoder = JavaScriptEncoder.Create(UnicodeRanges.All); // 取消 Unicode 編碼
            options.JsonSerializerOptions.IgnoreNullValues = true// 忽略空值
            options.JsonSerializerOptions.AllowTrailingCommas = true// 允許尾隨逗號
            options.JsonSerializerOptions.PropertyNameCaseInsensitive = true// 反序列化時不區(qū)分大小寫
        });
}

2. 序列化和反序列化

序列化

在控制器中返回對象時,System.Text.Json 會自動將其序列化為 JSON:

[HttpGet]
public IActionResult Get()
{
    var user = new { Name = "張三", Age = 30 };
    return Ok(user); // 自動序列化為 JSON
}

需要手動序列化,可以使用 JsonSerializer.Serialize

var user = new { Name = "張三", Age = 30 };
string jsonString = JsonSerializer.Serialize(user);
return Ok(jsonString);
反序列化

在接收 JSON 數(shù)據(jù)時,System.Text.Json 會自動將其反序列化為對象。例如,通過 [FromBody] 接收請求體中的 JSON 數(shù)據(jù):

[HttpPost]
public IActionResult Post([FromBody] User user)
{
    return Ok(user);
}

需要手動反序列化,可以使用 JsonSerializer.Deserialize

string jsonString = await new StreamReader(Request.Body).ReadToEndAsync();
var user = JsonSerializer.Deserialize<User>(jsonString);
return Ok(user);

3. 高級用法

自定義轉(zhuǎn)換器

需要對特定類型進行自定義序列化或反序列化,可以實現(xiàn) JsonConverter<T> 并注冊到 JsonSerializerOptions 中:

public classCustomDateTimeConverter : JsonConverter<DateTime>
{
    public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {
        return DateTime.Parse(reader.GetString());
    }

    public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options)
    {
        writer.WriteStringValue(value.ToString("yyyy-MM-dd"));
    }
}

services.AddControllers()
    .AddJsonOptions(options =>
    {
        options.JsonSerializerOptions.Converters.Add(new CustomDateTimeConverter());
    });
使用 JsonDocument 和 JsonNode

在某些場景下,可能需要動態(tài)處理 JSON 數(shù)據(jù),而不是直接映射到實體類。可以使用 JsonDocument 或 JsonNode

string jsonString = await new StreamReader(Request.Body).ReadToEndAsync();
using JsonDocument doc = JsonDocument.Parse(jsonString);
var name = doc.RootElement.GetProperty("Name").GetString();
return Ok(name);

或者使用 JsonNode

JsonNode node = JsonNode.Parse(jsonString);
var name = node["Name"].GetValue<string>();
return Ok(name);

4. 全局配置

在 Web API 中,可以通過 JsonSerializerOptions 配置全局的 JSON 處理行為。例如,設(shè)置日期格式:

services.AddControllers()
    .AddJsonOptions(options =>
    {
        options.JsonSerializerOptions.Converters.Add(new DateTimeConverter());
    });

其中,DateTimeConverter 是自定義的日期格式轉(zhuǎn)換器。

5. 性能優(yōu)化

從 .NET 8 開始,System.Text.Json 支持源生成(Source Generation),可以在編譯時生成優(yōu)化的序列化和反序列化代碼:

[JsonSerializable(typeof(User))]
[JsonSourceGenerationOptions(WriteIndented = true, PropertyNamingPolicy = JsonKnownNamingPolicy.CamelCase)]
public partial class JsonContext : JsonSerializerContext
{
}

dotnet 10 中新增的 JsonIgnoreCondition,可以比較方便地只處理屬性的序列化和反序列化時忽略。不過Net10是預(yù)覽版版本的,很期待上線,所以暫時不介紹。

6.特性

請參考:https://mp.weixin.qq.com/s/N1ldYFwjZfscJ4_UW7XBqg

總結(jié)

System.Text.Json 是 ASP.NET Core Web API 中默認的 JSON 處理庫,提供了豐富的配置選項和高性能的序列化與反序列化功能。通過合理配置和使用高級特性,可以滿足各種復(fù)雜的業(yè)務(wù)需求。


閱讀原文:原文鏈接


該文章在 2025/3/24 13:22:32 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調(diào)度、堆場、車隊、財務(wù)費用、相關(guān)報表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點,圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務(wù)都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 欧美中文字幕在线 | 国产盗摄偷窥在线观看 | 亚洲色精品aⅴ一区区三区 97午夜理论电影影院 | 国产精品中文字幕在线观看 | 国产xxx视频在线观看软件 | 国产国产人免费人成成免视频 | 国产午夜三级一区二区三 | 国产普通话对白视频高清 | 欧美1卡一卡二卡三新区 | 国产高清又黄又爽又刺激视频 | 欧美精品成人一区二区三区影院 | 2025最新免费在线影院 | 精品香蕉免费大视频日韩亚洲欧 | 国产97色在线| 男人下身进女人阳道视频视频在 | 国产午夜理论片不卡在线观看 | 愛妃)日韩视频在线免费观看 | 免费的三及片国产中文欧美 | 日本六九一区二区视频 | 国产乱子伦 | 99久免费精品视频在线观78 | 欧美男男激情videos高清 | 男女多人混交群体交乱 | 国产suv精品一区二区88 | 精品国产鲁一鲁一区二区 | 欧美做人爱a毛 | 国产亚洲欧美在线播放 | 成人国产精品一区二区八戒网 | 精品国产福利片在线观看 | 国产精品久免 | 91啪日韩一区二区 | 欧美xxxxxbb| 国产亚洲aⅴ在线观看不卡 99精品欧美一区二区蜜桃免费 | 九九九热在线精品免 | 精品国产午夜肉伦 | igao激情视频 | 福利片福利一区二区三区 | 国产日韩视频在线播放 | 欧美日韩偷拍一区二区 | 国产欧美自拍偷怕日韩亚洲 | 91se|