C# JSON 操作完全指南:从基础到高级

在现代 C# 开发中,JSON(JavaScript Object Notation)已成为数据交换和配置存储的事实标准。无论是与前端 API 交互、读写配置文件,还是进行服务间通信,熟练处理 JSON 都是一项必备技能。

本文将全面覆盖 C# 中 JSON 处理的核心知识,重点讲解两个主流库的使用:Newtonsoft.Json(Json.NET)和 .NET Core 3.0+ 内置的 System.Text.Json。我将从基础概念讲起,逐步深入到高级场景,并提供实用的最佳实践和问题排查方案。

一、JSON 数据格式详解

1. JSON 的基本结构

JSON 数据格式主要有两种核心结构:

  • 对象(Object):一个无序的键 / 值对集合,以 { 开始,} 结束。每个键后跟 :,键 / 值对之间用 , 分隔。
  • 数组(Array):一个有序的值集合,以 [ 开始,] 结束,值之间用 , 分隔。

2. JSON 的数据类型

JSON 支持以下数据类型:

  • 字符串(String):双引号包围的 Unicode 字符序列(如 "name": "张三")。
  • 数字(Number):整数、浮点数(正数、负数、零,如 "age": 30)。
  • 布尔值(Boolean):true 或 false(如 "isStudent": false)。
  • null:表示空值(如 "score": null)。
  • 对象(Object):嵌套的键 / 值对集合(如 "address": { "city": "北京" })。
  • 数组(Array):有序的值列表(如 "hobbies": ["篮球", "编程"])。

3. JSON 示例

{
  "name": "张三",
  "age": 30,
  "isStudent": false,
  "hobbies": ["篮球", "足球", "阅读"],
  "address": {
    "street": "123 Main Street",
    "city": "北京",
    "country": "中国"
  },
  "score": null
}

二、核心依赖库选择与准备

在 C# 中处理 JSON,你主要有两个选择:

  1. Newtonsoft.Json (Json.NET):功能强大、生态成熟、兼容性好,是 .NET Framework 和早期 .NET Core 项目的首选。
  2. System.Text.Json:.NET Core 3.0+ /.NET 5+ 内置的高性能库,无需额外依赖,是新项目的推荐选择。

安装依赖

  • 对于 Newtonsoft.Json:在 Visual Studio 中,右键点击项目 -> 管理 NuGet 程序包 -> 搜索 Newtonsoft.Json -> 安装最新稳定版。或使用 Package Manager Console:

Install-Package Newtonsoft.Json
  • 对于 System.Text.Json:它已内置在 .NET Core 3.0, .NET 5, .NET 6, .NET 7, .NET 8 等框架中,无需安装任何额外包。只需在代码中引用 System.Text.Json 命名空间即可。

三、基础概念:JSON 与 C# 对象的映射关系

JSON 的数据结构与 C# 的数据类型可以天然地对应起来,这是序列化和反序列化的基础。

JSON 数据类型C# 对应数据类型 (示例)
对象 (Object)class, struct
数组 (Array)List<T>, T[]
字符串 (String)string
数字 (Number)int, long, double, decimal
布尔值 (Boolean)bool
nullnull (对应可空类型,如 int?, string)

示例:定义映射 JSON 的 C# 实体类

假设我们有如下 JSON 数据:

{
  "Name": "张三",
  "Age": 25,
  "IsStudent": false,
  "Hobbies": ["篮球", "编程"],
  "Address": {
    "City": "北京",
    "Street": "中关村大街"
  },
  "Score": 95.5
}

我们可以定义对应的 C# 类:

// 嵌套对象 Address
public class Address
{
    public string City { get; set; }
    public string Street { get; set; }
}

// 主对象 User
public class User
{
    public string Name { get; set; }
    public int Age { get; set; }
    public bool IsStudent { get; set; }
    public List<string> Hobbies { get; set; } // 数组对应 List<string>
    public Address Address { get; set; }     // 嵌套对象
    public decimal? Score { get; set; }      // 可空类型,对应 JSON 的 null
}

四、基础操作:序列化与反序列化

序列化(Serialization)是将 C# 对象转换为 JSON 字符串的过程。反序列化(Deserialization)是将 JSON 字符串转换回 C# 对象的过程。

1. 使用 Newtonsoft.Json

序列化 (Object to JSON)
using Newtonsoft.Json;
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        // 1. 构建 C# 对象实例
        var user = new User
        {
            Name = "张三",
            Age = 25,
            IsStudent = false,
            Hobbies = new List<string> { "篮球", "编程" },
            Address = new Address { City = "北京", Street = "中关村大街" },
            Score = 95.5m
        };

        // 2. 序列化
        // Formatting.Indented 用于生成带缩进的、可读性好的 JSON 字符串
        string jsonString = JsonConvert.SerializeObject(user, Formatting.Indented);

        // 3. 输出结果
        Console.WriteLine(jsonString);
    }
}

输出结果将是格式化后的 JSON 字符串,与上文示例一致。

反序列化 (JSON to Object)
using Newtonsoft.Json;
using System;

class Program
{
    static void Main()
    {
        // 1. JSON 字符串
        string jsonString = @"{
          ""Name"": ""李四"",
          ""Age"": 30,
          ""IsStudent"": true,
          ""Hobbies"": [""读书"", ""跑步""],
          ""Address"": {
            ""City"": ""上海"",
            ""Street"": ""外滩大道""
          },
          ""Score"": null
        }";

        // 2. 反序列化
        User user = JsonConvert.DeserializeObject<User>(jsonString);

        // 3. 访问对象属性
        Console.WriteLine($"姓名: {user.Name}");
        Console.WriteLine($"年龄: {user.Age}");
        Console.WriteLine($"城市: {user.Address.City}");
        Console.WriteLine($"分数: {user.Score ?? "无分数"}"); // 处理可空类型
    }
}

2. 使用 System.Text.Json

序列化 (Object to JSON)
using System;
using System.Collections.Generic;
using System.Text.Json;

class Program
{
    static void Main()
    {
        // 1. 构建 C# 对象实例 (同上)
        var user = new User
        {
            Name = "张三",
            Age = 25,
            IsStudent = false,
            Hobbies = new List<string> { "篮球", "编程" },
            Address = new Address { City = "北京", Street = "中关村大街" },
            Score = 95.5m
        };

        // 2. 配置序列化选项
        var options = new JsonSerializerOptions
        {
            WriteIndented = true, // 格式化输出
            // 解决中文被转义为 Unicode 的问题
            Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping
        };

        // 3. 序列化
        string jsonString = JsonSerializer.Serialize(user, options);

        // 4. 输出结果
        Console.WriteLine(jsonString);
    }
}
反序列化 (JSON to Object)
using System;
using System.Text.Json;

class Program
{
    static void Main()
    {
        // 1. JSON 字符串 (同上)
        string jsonString = @"{
          ""Name"": ""李四"",
          ""Age"": 30,
          ""IsStudent"": true,
          ""Hobbies"": [""读书"", ""跑步""],
          ""Address"": {
            ""City"": ""上海"",
            ""Street"": ""外滩大道""
          },
          ""Score"": null
        }";

        // 2. 配置反序列化选项
        var options = new JsonSerializerOptions
        {
            // 忽略 JSON 键名的大小写,增强兼容性
            PropertyNameCaseInsensitive = true 
        };

        // 3. 反序列化
        User user = JsonSerializer.Deserialize<User>(jsonString, options);

        // 4. 访问对象属性 (同上)
        Console.WriteLine($"姓名: {user.Name}");
        Console.WriteLine($"爱好: {string.Join(", ", user.Hobbies)}");
    }
}

五、高级场景处理

1. 键名映射(JSON 与 C# 属性名不一致)

当 JSON 键名(如 user_name)与 C# 命名规范(如 UserName)不一致时,需要显式指定映射关系。

  • Newtonsoft.Json 使用 [JsonProperty] 特性:

public class User
{
    [JsonProperty("user_name")]
    public string Name { get; set; }

    [JsonProperty("user_age")]
    public int Age { get; set; }
}

  • System.Text.Json 使用 [JsonPropertyName] 特性:

    using System.Text.Json.Serialization;
    
    public class User
    {
        [JsonPropertyName("user_name")]
        public string Name { get; set; }
    
        [JsonPropertyName("user_age")]
        public int Age { get; set; }
    }
    

2. 忽略指定属性

序列化时,有时需要忽略某些敏感信息(如密码)或无需传输的属性。

  • Newtonsoft.Json 使用 [JsonIgnore] 特性:

    public class User
    {
        public string Name { get; set; }
        
        [JsonIgnore]
        public string Password { get; set; } // 序列化时将被忽略
    }
    
  • System.Text.Json 使用 [JsonIgnore] 特性:

    using System.Text.Json.Serialization;
    
    public class User
    {
        public string Name { get; set; }
    
        [JsonIgnore]
        public string Password { get; set; } // 序列化时将被忽略
    }
    

3. 处理日期时间

JSON 本身没有日期时间类型,通常以字符串("2024-05-20")或时间戳(1716220800000)表示。

  • Newtonsoft.Json

    var user = new { BirthDate = new DateTime(2000, 1, 1) };
    
    // 序列化为指定格式的字符串
    string json = JsonConvert.SerializeObject(user, new JsonSerializerSettings
    {
        DateFormatString = "yyyy-MM-dd",
        Formatting = Formatting.Indented
    });
    // 输出: {"BirthDate":"2000-01-01"}
    
  • System.Text.Json (.NET 6+)

    var user = new { BirthDate = new DateTime(2000, 1, 1) };
    
    var options = new JsonSerializerOptions
    {
        WriteIndented = true,
        DateFormatString = "yyyy-MM-dd" // 直接指定日期格式
    };
    
    string json = JsonSerializer.Serialize(user, options);
    // 输出: {"BirthDate":"2000-01-01"}
    

4. 动态解析 JSON(无需实体类)

在不确定 JSON 结构或结构频繁变化时,可以将其解析为动态对象或字典。

  • Newtonsoft.Json - 动态对象 (dynamic)

    string jsonString = @"{ ""name"": ""王五"", ""age"": 28 }";
    
    dynamic dynamicUser = JsonConvert.DeserializeObject(jsonString);
    Console.WriteLine(dynamicUser.name); // 输出: 王五
    Console.WriteLine(dynamicUser.age);  // 输出: 28
    
  • System.Text.Json - JsonDocument (推荐)JsonDocument 提供了一种高效、低分配的方式来读取 JSON 数据,适合临时查询。

    string jsonString = @"{ ""name"": ""王五"", ""age"": 28, ""address"": { ""city"": ""广州"" } }";
    
    // 使用 'using' 语句确保资源被释放
    using JsonDocument doc = JsonDocument.Parse(jsonString);
    JsonElement root = doc.RootElement;
    
    string name = root.GetProperty("name").GetString();
    int age = root.GetProperty("age").GetInt32();
    string city = root.GetProperty("address").GetProperty("city").GetString();
    
    Console.WriteLine($"{name}, {age}, {city}"); // 输出: 王五, 28, 广州
    

5. 处理 JSON 文件

读写 JSON 配置文件是常见需求。

using System.IO;
using Newtonsoft.Json; // 或 using System.Text.Json;

public class Config
{
    public string ApiKey { get; set; }
    public int Timeout { get; set; }
}

// 写入 JSON 文件
var config = new Config { ApiKey = "123456", Timeout = 30 };
string json = JsonConvert.SerializeObject(config, Formatting.Indented);
File.WriteAllText("appsettings.json", json, Encoding.UTF8);

// 读取 JSON 文件
string jsonFromFile = File.ReadAllText("appsettings.json", Encoding.UTF8);
Config loadedConfig = JsonConvert.DeserializeObject<Config>(jsonFromFile);
Console.WriteLine(loadedConfig.ApiKey);

System.Text.Json 的用法类似,只需替换 JsonConvert 为 JsonSerializer 并使用相应的 Options。

六、常见问题与注意事项

  1. 中文乱码:

    • Newtonsoft.Json 默认处理较好。
    • System.Text.Json 需要配置 Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping 来避免中文被转义为 Unicode。
    • 读写文件时,始终指定编码为 Encoding.UTF8。
  2. 可空类型:

    • JSON 中的 null 值必须映射到 C# 的可空类型(如 int?, string, decimal?),否则反序列化会失败。
  3. 键名大小写:

    • Newtonsoft.Json 默认忽略大小写。
    • System.Text.Json 默认区分大小写,建议在反序列化时设置 PropertyNameCaseInsensitive = true 以提高兼容性。
  4. 循环引用:

    • 当对象之间存在循环引用(A 包含 B,B 包含 A)时,直接序列化会导致无限递归和内存溢出。
    • Newtonsoft.Json:new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore }
    • System.Text.Json (.NET 5+):new JsonSerializerOptions { ReferenceHandler = ReferenceHandler.IgnoreCycles }
  5. 枚举处理:

    • 默认情况下,枚举会被序列化为其 underlying type(通常是 int)。
    • 若需序列化为字符串,需使用特性:
      • Newtonsoft.Json: [JsonConverter(typeof(StringEnumConverter))]
      • System.Text.Json: [JsonConverter(typeof(JsonStringEnumConverter))]

七、库的选择建议

特性Newtonsoft.Json (Json.NET)System.Text.Json
性能良好优秀 (通常更快,内存占用更低)
依赖需要安装 NuGet 包内置,无需额外依赖
.NET 版本.NET Framework, .NET Core, .NET 5+.NET Core 3.0+, .NET 5+
功能丰富度极高,API 灵活,支持大量高级场景高,.NET 6+ 版本功能已非常完善
生态与社区非常成熟,问题解决方案多快速成长,官方支持力度大

选择建议:

  • 新项目 (.NET 5+):优先选择 System.Text.Json。它性能优异,与框架深度集成,是未来的发展方向。
  • 维护旧项目 (.NET Framework):继续使用 Newtonsoft.Json,它能提供最稳定和全面的支持。
  • 需要复杂自定义序列化逻辑:Newtonsoft.Json 的 API 可能更灵活,更容易实现某些复杂场景。但 System.Text.Json 在最新版本中也在不断追赶。

总结

本文详细介绍了 C# 中处理 JSON 的两大主流库 Newtonsoft.Json 和 System.Text.Json。从环境准备、基础概念、核心的序列化与反序列化操作,到键名映射、日期处理等高级场景,再到常见问题排查和库的选择建议,都进行了全面的覆盖。

希望对大家有所帮助。感谢大家的关注和点赞。

C#解析JSON string jsonText = "{\"name\":\"网站\",\"num\":2,\"sites\":[{\"name\":\"Google\",\"info\":[\"Android\",\"Google搜索\",\"Google翻译\"]},{\"name\":\"Taobao\",\"info\":[\"淘宝\",\"网购\"]}]}";string jsonText = "{\"allname\":{\"name\":\"张三\",\"name_en\":\"zhangsan\"}}"; 阅读详情

相关推荐

盘点C# 操作JSON几种方式

这些仅为个人经验,希望能给大家一个参考,也希望对大家有所帮助微点阅读。

xiaoweids的博客 1535

在C#中使用JSON

在C#中使用JSON

R3333355726856的博客 1万+

在 C# 中使用 JSON:从解析到生成的完整指南

你可以使用。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 3552

C# 解析JSON详解

JSON的全称是,是一种轻量级的数据交换格式,主要用于数据的序列化和交互。

一名热爱技术的工程师的博客。分享技术干货,记录美好生活。永远相信美好的事情即将发生。 1万+

C# 读写 JSON 文件全攻略:详尽代码示例与注释解析

以上代码展示了如何使用C#配合Newtonsoft.Json库来读取和写入JSON文件。通过定义与JSON结构匹配的C#类,您可以轻松地将JSON数据与应用程序中的对象模型相互转换。在实际应用中,只需替换或扩展这些示例中的类与方法,即可适应您的具体业务需求。务必注意文件路径的正确性和文件操作的权限问题,以及在处理异常时采取适当的恢复或通知机制。

java专栏 9996

C#与Newtonsoft.Json深入指南:JSON数据操作完全教程

欢迎进入第一章节的学习,本章节将为您揭开C#编程语言的神秘面纱,并介绍JSON数据交换格式的基础知识。C#由微软公司于2000年首次发布,旨在成为.NET框架中的一门面向对象的编程语言。随着.NET框架的进化,C#也经历了多次重要版本的迭代,包括C# 2.0引入的泛型,C# 3.0中引入的LINQ,以及C# 5.0中的异步编程特性等。每一个新版本都使得C#在语法表达力、类型安全性以及运行时性能上得到了显著的提升。

weixin_30205153的博客 1099

全面掌握C#的JObject类:C#开发之JSON数据解析与操作实战指南

全面掌握C#的JObject类:C#开发之JSON数据解析与操作实战指南

编程技术探索者,分享C/C++、C#、Java、数据库等开发经验,聚焦实战技巧与AI兴趣,助力编程爱好者成长。 1万+

掌握C#中Json.NET的JSON转换技巧

除了基本的序列化和反序列化功能,Json.NET还提供了许多高级功能,比如自定义转换器、支持泛型集合和动态类型、JSON路径查询等。使用自定义转换器来处理特定类型的序列化:// 读取JSON中的时间字符串,并将其转换为DateTime对象// 将DateTime对象转换为JSON格式的字符串// 使用时,将这个转换器应用到序列化或反序列化操作中BSON,即Binary JSON,是一种类似于JSON的数据格式,但以二进制形式存储,其设计目标是在网络传输中更有效率。

weixin_36197669的博客 1172

C#操作JSON和JSON的基础知识

JSON 1. 什么是JSON JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON 是轻量级的文本数据交换格式 JSON 独立于语言:JSON 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平台 JSON 具有自我描述性,更易理解(JSON 是基于Javascript的对象进行描述的, 它的每一组值都是键值对组成,它的键就是相当于描述对象的属性,我们可以很好的通过键来看到它表述的是什么意思,所以Json具有自

golden_stone_fish的博客 3620

深度学习赋能胶囊内镜:AI如何实现胃肠道出血的自动检测与分割

在计算机视觉领域,图像分类与目标检测是处理医学影像分析的核心技术。其原理在于通过卷积神经网络(CNN)自动学习图像中的多层次特征表示,实现对特定目标的识别与定位。这项技术的价值在于能够将医生从海量、重复的阅片工作中解放出来,提升诊断效率与一致性,尤其在处理如胶囊内镜产生的数万张连续图像时优势显著。其应用场景广泛覆盖了医学影像的辅助诊断,例如在消化内科,对胃肠道出血的早期发现与精准定位具有重要临床意义。本文聚焦于利用深度学习模型,如U-Net和EfficientNet,构建一个能够从复杂多变的胶囊内镜图像中,

weixin_42533910的博客 381

【算法】基于STM32的MPU6050卡尔曼滤波算法(入门级)

1. 简介 卡尔曼滤波(Kalman filtering)是一种利用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法。由于观测数据中包括系统中的噪声和干扰的影响,所以最优估计也可看作是滤波过程。详情见:卡尔曼滤波简介 MPU6050的解算主要有三种姿态融合算法:四元数法 、一阶互补算法和卡尔曼滤波算法。我们常用的DMP库使用的是四元数法,本文采用卡尔曼滤波算法,使用RT-Thread国产操作系统,利用env工具进行串口、模拟IIC环境配置,使用10ms的线程进行卡尔曼滤波解算。 2.

weixin_44549777的博客 3万+

C# 操作JSON数据

目录 第一章:C#如何拿到从http上返回JSON数据? 第二章:C#如何解析JSON数据?(反序列化对象) 第三章:C#如何生成JSON字符串?(序列化对象) 第四章:C#如何生成JSON字符串提交给接口(服务器) JSON测试及生成实体类网站:https://www.bejson.com/convert/json2csharp { "name": "BeJson", "url": "http://www.bejson.com", "page": 88..

Violinlins 3245

Android13 CarPowerManagementService onApPowerStateChange流程分析

如下为CarPower上电的流程图:下面我们从代码角度分析:在CPMS的init方法中会调用onApPowerStateChange(CpmsState.WAIT_FOR_VHAL, CarPowerManager.STATE_WAIT_FOR_VHAL); 设置ApPowerState为STATE_WAIT_FOR_VHAL: 在onApPowerStateChange中调用PowerHandler 的handlePowerStateChange方法: 在handlePowerStateChang

liuning1985622的博客 925

C# 操作JSON的几种方式

关于Json数据在开发中的重要性,自然不言而喻; 本篇通过两种在c#中常用的方式来实现对Json数据的序列化和反序列化,为了实现大多数的需求,我们采用稍微复杂一点的数据模型。 首先我们有以下json数据 { "name": "张三", "age": 20, "idCard": "123456789", "birthday": "2021-01-01 00:00:00", "hobbys": [ { "sort": 1, "desc": "写

qq_27410185的博客 2万+

【AutoSAR】【诊断栈】传输层CANTP

一、功能介绍 数据包发送放拆包分段发送 数据包接收方重组 流控 错误检测 二、参考协议 ISO 15765-2 三、数据帧格式 1、协议数据单元(PDU)格式 2、协议数据单元 - PCI格式 四、数据帧传输 1、单帧传输 CAN帧数据长度小于8字节(包括PCI信息) 无流控握手 PCI包含帧类型、数据长度和数据域 未使用字节填充 2、多帧传输 数据长度超过8字节 流控握手 定时控制 CAN帧类型包括: 首帧 流控帧 后继帧 3、多..

专注汽车软件开发、AutoSAR、车载以太网、SOA、EE架构。 1554

HyperLynx(十四)高级分析技术

如果没有查找到该模型,可使用菜单命令“Setup”→“Options”→“Directories”,打开“Set Directories”对话框,单击“Edit”按钮,在“Select Directories for IC-Model Files”对话框中将路径“…在“Assign Models”对话框中的“Port”栏找到“OUTM”端口,在其对应的“Circuit Connection”栏中选择“txout”项。将端口R75连接到“Gnd”。同样,将“EMP”连接到“V”,完成预加重设置。...

小幽余生不加糖 4950

C# 读写json文件操作

C# 读写json文件操作

jk_rou的博客 9369

Python 爬虫实战:龙虎榜机构买卖数据爬取与代码详解(附数据分析)

龙虎榜是证券市场中重要的市场信息之一,记录了当日大宗交易及机构买卖情况,包括机构名称、买卖方向、成交金额、成交股数、买入卖出价格等信息。通过分析龙虎榜数据,投资者可以更好地了解市场动向和机构投资者的行为,从而做出更准确的决策。本文将详细介绍如何使用 Python 编写爬虫程序,高效地抓取龙虎榜机构买卖数据,并进行数据分析。我们将从环境搭建、数据抓取、数据存储到数据分析等关键步骤逐一展开,帮助读者掌握完整的爬虫实战流程。

u014481728的博客 702

【亲测免费】 Utf8Json完全指南:极速零分配的JSON处理库

**Utf8Json** 是由开发者Yoshifumi Kawai在2016年发布的,专为C#(包括.NET、.NET Core、Unity及Xamarin)设计的一款高性能JSON序列化与反序列化库。它以“绝对最快且零内存分配”著称,在速度与资源效率上远超传统如Newtonsoft.Json等库,特别适合对性能要求高的场景。 ## 项目快速启动 要快速开始使用Utf8Json,首先确保你的开...

gitblog_00969的博客 940

PX4从放弃到精通(二十二):日志

文章目录前言一、下载日志二、ulog转CSV三、利用flightplot软件分析PX4的ulog日志1 windos安装2 ubuntu18.04安装四、使用PlotJuggler分析PX4日志五、设置日志记录条件六、添加自定义日志消息 前言 PX4 1.10以上固件 QGC 一、下载日志 将飞控链接地面站,在下图页面点击“刷新”,即可看到保存的日志(前提是要有TF卡) 选择需要下载的日志,点击右侧的“下载”,然后选择目录即可进行下载,如果想擦除所有的日志,可以点击右侧的“擦除全部” 二、ulog转CS

超维空间科技的博客 6797

lvgl 9虚拟键盘控件 (lv_keyboard) 使用指南

是 LittlevGL 提供的一个虚拟键盘控件,适用于在图形界面中输入文本。与按钮矩阵类似,虚拟键盘预定义了多个键位布局,支持多种模式和自定义键位映射,能够满足各种文本输入需求。通过与文本区域 (Text Area) 的结合,键盘能够自动将输入的字符传送到指定区域。控件是 LittlevGL 提供的强大虚拟键盘解决方案,适用于任何需要文本输入的界面。通过预定义的键盘模式、自定义键位映射和文本区域自动填充功能,可以大大提升用户输入体验。无论是在嵌入式系统的用户界面中,还是在其他需要虚拟键盘的应用中,

m0_62599305的博客 2185

C# 操作 JSON

实例:基于X86的Linux系统调用机制简介

Major_S的博客 1771

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Newtonsoft.Json:C#开发者的JSON终极指南

Newtonsoft.Json是C#中最流行的JSON处理库,提供灵活高效的序列化和反序列化功能。本文介绍了其核心使用方法,包括基础安装配置、基本序列化/反序列化操作,以及通过特性控制JSON输出的高级技巧(如自定义属性名、忽略属性、默认值处理等)。文章还对比了Newtonsoft.Json与System.Text.Json的差异,建议根据项目需求选择合适的库。通过实际代码示例,展示了如何利用JsonProperty、JsonIgnore等特性精细控制JSON格式,满足不同场景下的数据处理需求。

weixin_42488418的博客 705

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

C#处理json

一、json 1、json 是一种轻量级的数据交换格式 2、json 包含:值、对象、数组 (1)、JSON值可以为:字符串、数值、布尔值、对象、数组、空 (2)、JSON对象: 用 { } 括起来 键值对,中间用:分开 用逗号分割各个键值对 如: { 名称1 : 值1 , 名称2 : 值2 } (3)、 json 的基本格式:对象格式和数组格式,其他的各种都可以为基本格式的组合...

Jeffxu_lib的博客 2957

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

上一篇: WinForm+C#小案例--->猜字母PK游戏
下一篇: WinForm+C#小案例--->用代码实现窗体设计的香烟购物车小案例
MM_MS
博客等级 码龄1年 58粉丝 100原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MM_MS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值