C# MAUI怎么解析JSON数据 MAUI JSON序列化教程

12次阅读

.net MAui 中解析 jsON 最推荐使用内置的 System.Text.json;需先定义匹配的 C# 数据模型,再通过 JsonSerializer.Deserialize(jsonString) 反序列化,支持字符串、文件及网络响应,注意异常处理与异步上下文。

C# MAUI怎么解析JSON数据 MAUI JSON序列化教程

在 .NET MAUI 中解析 JSON 数据,最推荐的方式是使用内置的 System.Text.Json(.NET 6+ 默认 JSON 库),它轻量、高性能、无需额外 NuGet 包,且与 MAUI 完全兼容。

定义匹配的 C# 类型

JSON 解析前必须先有对应的数据模型。比如你收到如下 JSON:

{“name”:”张三”,”age”:28,”isActive”:true}

就应创建一个匹配的类:

public class User {     public string Name { get; set; }     public int Age { get; set; }     public bool IsActive { get; set; } }

注意:属性名默认需与 JSON 字段名一致(区分大小写),如不一致可用 [JsonPropertyName("user_name")] 特性标记。

从字符串反序列化为对象

这是最常见场景,例如从 API 响应或本地 JSON 文件读取后解析:

  • 确保已引入命名空间using System.Text.Json;
  • 调用 JsonSerializer.Deserialize(jsonString)
  • 建议加 try-catch 处理格式错误

示例代码:

string json = @"{""name"":""李四"",""age"":30,""isActive"":false}"; try {     User user = JsonSerializer.Deserialize(json);     Console.WriteLine($"{user.Name}, {user.Age}"); } catch (JsonException ex) {     Console.WriteLine("JSON 格式错误:" + ex.Message); }

处理数组和嵌套结构

JSON 数组直接映射为 C# 的 ListT[];嵌套对象则用子类表示。

例如解析:
[{“id”:1,”profile”:{“nick”:”小王”,”score”:95}}]

对应模型:

public class Player {     public int Id { get; set; }     public Profile Profile { get; set; } } 

public class Profile { public string Nick { get; set; } public int Score { get; set; } }

解析方式不变:

List players = JsonSerializer.Deserialize>(jsonString);

从文件或网络加载 JSON 后解析

MAUI 支持跨平台文件访问(如 Filesystem.appDataDirectory)和 http 请求:

  • 读取本地 JSON 文件(如 data.json):
string path = Path.Combine(FileSystem.AppDataDirectory, "data.json"); string json = await File.ReadAllTextAsync(path); var data = JsonSerializer.Deserialize(json);
  • 从网络获取(配合 HttpClient):
using var client = new HttpClient(); string json = await client.GetStringAsync("https://api.example.com/users"); var users = JsonSerializer.Deserialize>(json);

注意:网络请求请放在异步方法中,并在 UI 线程安全地更新界面(如用 MainThread.InvokeOnMainThreadAsync)。

基本上就这些。System.Text.Json 在 MAUI 中开箱即用,不需要 Newtonsoft.Json(除非遗留项目强依赖)。只要模型对得上、注意异常处理、分清同步/异步上下文,JSON 解析很稳。

text=ZqhQzanResources