首页 > 其他分享 >使用Json.NET序列化和反序列化对象时,声明命名规则

使用Json.NET序列化和反序列化对象时,声明命名规则

时间:2025-01-23 21:32:01浏览次数:1  
标签:Console Description Json WriteLine NET 序列化 Name

在使用Json.NET来序列化和反序列化对象时,我们可以在类或者属性上声明使用什么命名规则,Json.NET目前支持三种命名规则:

这三个类可以通过JsonObjectAttribute声明在类上,也可以通过JsonPropertyAttribute声明在属性或者字段上,如下代码所示:

using Newtonsoft.Json.Serialization;
using Newtonsoft.Json;

namespace Net8JsonNameDemo
{
    //给整个类声明使用驼峰命名法,来序列化和反序列化Json
    [JsonObject(NamingStrategyType = typeof(CamelCaseNamingStrategy))]
    class People
    {
        public required string Name
        {
            get;
            set;
        }

        public int? Age
        {
            get;
            set;
        }

        public string? Description
        {
            get;
            set;
        }

        //给某个属性声明使用下划线命名法,来序列化和反序列化Json
        [JsonProperty(NamingStrategyType = typeof(SnakeCaseNamingStrategy))]
        public decimal? BaseSalary
        {
            get;
            set;
        }
    }

    //给整个类声明使用帕斯卡命名法(默认就是帕斯卡命名法),来序列化和反序列化Json
    [JsonObject(NamingStrategyType = typeof(DefaultNamingStrategy))]
    class Person
    {
        public required string Name
        {
            get;
            set;
        }

        //给某个属性声明使用驼峰命名法,来序列化和反序列化Json
        [JsonProperty(NamingStrategyType = typeof(CamelCaseNamingStrategy))]
        public int? Age
        {
            get;
            set;
        }

        public string? Description
        {
            get;
            set;
        }

        //给某个属性声明使用驼峰命名法,来序列化和反序列化Json
        [JsonProperty(NamingStrategyType = typeof(CamelCaseNamingStrategy))]
        public decimal? BaseSalary
        {
            get;
            set;
        }
    }

    internal class Program
    {
        static void Main(string[] args)
        {
            People people = new People()
            {
                Name = "王大锤, Jack Wang",
                Age = 16,
                BaseSalary = 1000,
                Description = "This is a demo text,这是示例文本"
            };

            string json = JsonConvert.SerializeObject(people, Formatting.Indented);
            Console.WriteLine(json);
            People? newPeople = JsonConvert.DeserializeObject<People>(json);
            Console.WriteLine("newPeople Name={0}; Age={1}; BaseSalary={2}; Description={3}", newPeople?.Name, newPeople?.Age, newPeople?.BaseSalary?.ToString(), newPeople?.Description?.ToString());

            Person person = new Person()
            {
                Name = "张小明, James Zhang",
                Age = 25,
                BaseSalary = 2000,
                Description = "This is a demo text2,这是示例文本2"
            };

            Console.WriteLine();
            Console.WriteLine();
            Console.WriteLine();

            json = JsonConvert.SerializeObject(person, Formatting.Indented);
            Console.WriteLine(json);
            Person? newPerson = JsonConvert.DeserializeObject<Person>(json);
            Console.WriteLine("newPerson Name={0}; Age={1}; BaseSalary={2}; Description={3}", newPerson?.Name, newPerson?.Age, newPerson?.BaseSalary?.ToString(), newPerson?.Description?.ToString());

            Console.WriteLine();
            Console.WriteLine();
            Console.WriteLine();

            Console.WriteLine("Press any key to end...");
            Console.ReadLine();
        }
    }
}

运行上面的代码,结果如下所示:

{
  "name": "王大锤, Jack Wang",
  "age": 16,
  "description": "This is a demo text,这是示例文本",
  "base_salary": 1000.0
}
newPeople Name=王大锤, Jack Wang; Age=16; BaseSalary=1000.0; Description=This is a demo text,这是示例文本



{
  "Name": "张小明, James Zhang",
  "age": 25,
  "Description": "This is a demo text2,这是示例文本2",
  "baseSalary": 2000.0
}
newPerson Name=张小明, James Zhang; Age=25; BaseSalary=2000.0; Description=This is a demo text2,这是示例文本2



Press any key to end...

 

可以参考下面的官方文档,有更多方法来声明Json.NET的命名规则:

Camel case property names

Snake case property names

JsonObjectAttribute NamingStrategy setting

Configure NamingStrategy dictionary serialization

Configure NamingStrategy property name serialization

 

标签:Console,Description,Json,WriteLine,NET,序列化,Name
From: https://www.cnblogs.com/OpenCoder/p/18688648

相关文章

  • 一文吃透dotnet命令,开启高效开发之旅
    一、引言在.NET开发的广袤天地中,dotnet命令宛如一把瑞士军刀,是开发者们不可或缺的得力工具。无论是初出茅庐的编程新手,还是经验丰富的技术专家,dotnet命令都在项目的全生命周期中扮演着举足轻重的角色。从项目的初始化创建,到构建、测试、部署,每一个关键环节都离不开dotnet......
  • 使用Json.NET序列化对象时,忽略为null的属性
    通过枚举NullValueHandling.Ignore,在使用Json.NET序列化对象为Json字符串时,可以忽略为null的属性,如下代码所示:usingNewtonsoft.Json;namespaceNet8JsonNullValueDemo{classPeople{publicrequiredstringName{get;......
  • YOLO训练自己的分割数据集,使用labelme标注的分割数据集产生的.json文件转化为YOLOv8识
    将labelme标注的分割数据集,转化为YOLOv8识别的.txt文件数据集分为两部分,第一部分先将labelme标注的分割数据集转化为coco格式的文件,第二步,在将coco格式的JSON文件转化为yolo格式的txt文件第一部分:将labelme标注的分割数据集转化为coco格式的文件第一步首先建立一个文件夹myd......
  • Seq 日志: .NET 应用程序中集成与快速入门
    Seq是一个功能强大且易于使用的日志服务器,特别适合用于集中管理和可视化.NET应用程序的日志。它支持结构化日志记录,提供实时查询和分析功能,帮助开发者快速定位和解决问题。安装和配置SeqWindows部署:可以从Seq下载页面:https://datalust.co/download获取最新版本并按照......
  • FlaUI:.NET 自动化测试 Windows 应用的强大工具
    FlaUI是一个基于微软UIAutomation技术的.NET库,主要用于对Windows应用程序(如Win32、WinForms、WPF等)进行自动化UI测试。它提供了强大的元素查找和交互功能,支持多种框架,并且易于使用和定制。内部采用异步调用以提高效率,社区也非常活跃。安装确保已安装.NET环境:FlaUI......
  • ASP.NET Core 中基于 Cookie 的身份鉴权实现步骤
    在ASP.NETCore应用中,基于Cookie的身份鉴权是一种常见的身份验证方式,特别适用于传统的Web应用程序。Cookie能够在用户的浏览器中存储身份验证数据,从而在用户访问应用的不同页面时保持登录状态。一、配置Cookie身份验证首先,在Startup.cs或Program.cs文件中配置Cook......
  • ASP.NET Core 使用响应压缩中间件提高程序性能
    20250104_ASP.NETCore使用响应压缩中间件提高程序性能ASP.NETCore中的响应压缩中间件1.什么是响应压缩中间件响应压缩中间件是ASP.NETCore的一部分,它通过应用支持的压缩算法(如Gzip和Brotli)来减小服务器发送到客户端的响应体积。这有助于加速数据传输,尤其适用于大段文本和......
  • ASP.NET Core 中的超时中间件
    ASP.NETCore中的超时中间件在ASP.NETCore中,超时中间件允许为HTTP请求设置超时限制,以提高应用程序的健壮性和响应能力。1.添加超时中间件到应用需要在的服务集合中添加请求超时中间件,再将其添加到请求处理管道中。usingMicrosoft.AspNetCore.Http.Timeouts;varbuilder......
  • ASP.NET Core 快速轻量级的浏览器检测和设备检测库
    在.NETFramework4.7中那样,通过HttpContext.Request的Browser属性轻松获取发起HTTP请求的浏览器信息,ASP.NETCore并未直接提供这一功能,现在有了BrowserDetector这个强大的NuGet包,你可以在ASP.NETCore应用中轻松实现浏览器、设备类型以及操作系统的检测。Browser......
  • .NET开源强大的高级日期和时间库
    NodaTime是一个为.NET设计的开源高级日期和时间库,提供了比.NET框架自带的DateTime和DateTimeOffset更加丰富和可靠的日期时间操作功能。1.安装NodaTime首先,通过NuGet安装NodaTime包:Install-PackageNodaTime2.基本概念NodaTime提供了多种日期和时间类型,主......