首页 > 编程语言 >C# 序列化大小写 序列化对象为大小写 JsonConvert.SerializeObject

C# 序列化大小写 序列化对象为大小写 JsonConvert.SerializeObject

时间:2023-06-29 17:01:39浏览次数:44  
标签:obj C# System 大小写 var using 序列化 public

关于C#序列化Json对象

框架:.Net

插件:Newtonsoft.Json

最近有人问我序列化对象还区分大小写? 我当时心想我都是通过Bejson 格式化然后转换为C# 类然后直接复制。

没有关心过序列化成什么大小写。因为这样的话可以保持一致。

直到有人问我才自己研究了一下。

如下:

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using Newtonsoft.Json.Serialization;
using Formatting = Newtonsoft.Json.Formatting;
using static System.Net.Mime.MediaTypeNames;
using System.Text.Json;
using System.Xml.Linq;
using static System.Threading.Thread;
using static 序列化.Program;

namespace 序列化
{
    internal class Program
    {
        private static void Main()
        {
            //定义匿名对象
            var user = new { name = "john", age = 19 };
            var user1 = new { NAME = "JOHN", AGE = 19 };
            var user2 = new { Name = "john", Age = 19 };
            var user3 = new { namE = "john", agE = 19 };
            var user4 = new { naMe = "john", aGe = 19 };

            Action(user);
            Action(user1);
            Action(user2);
            Action(user3);
            Action(user4);
            Console.WriteLine("分割");
            Action1(user);
            Action1(user1);
            Action1(user2);
            Action1(user3);
            Action1(user4);
            Console.WriteLine("分割");
            var person = new Person { Age = 10, Name = "john" };
            Action2(person);
            var person1 = new Person1 { Age = 10, Name = "john" };
            Action2(person1);

            Console.ReadKey();
        }

        public static void Action(dynamic obj)
        {
            var serializerSettings = new JsonSerializerSettings
            {
                // 设置为驼峰命名
                ContractResolver = new CamelCasePropertyNamesContractResolver()
            };
            //序列化成字符串
            var userStr = JsonConvert.SerializeObject(obj, Formatting.None, serializerSettings);

            //输出字符串
            Console.WriteLine($"方法一{userStr}");
        }

        public static void Action1(dynamic obj)
        {
            //ToTitleCase 会把头一个字母大写  弊端:如果你的变量值为英文则也会变成大写
            var monstrous = CurrentThread.CurrentCulture.TextInfo.ToTitleCase(JsonConvert.SerializeObject(obj));

            //ToUpper 将所有文本变成大写
            var monstrous1 = CurrentThread.CurrentCulture.TextInfo.ToUpper(JsonConvert.SerializeObject(obj));

            //ToUpper 将所有文本变成大写
            var monstrous2 = CurrentThread.CurrentCulture.TextInfo.ToLower(JsonConvert.SerializeObject(obj));
            Console.WriteLine($"方法二{monstrous}{monstrous1}{monstrous2}");
        }
        public static void Action2(Person obj)
        {
            //Formatting.Indented 使用子类型对象
            var json = JsonConvert.SerializeObject(obj, Formatting.Indented);
            Console.WriteLine($"方法三{json}");
        }
        public static void Action2(Person1 obj)
        {
            var json = JsonConvert.SerializeObject(obj, Formatting.Indented);
            Console.WriteLine($"方法三{json}");
        }
        [DataContract]
        public class Person
        {
            [DataMember(Name = "AGE")]
            public int Age { get; set; }

            [DataMember(Name = "NAME")]
            public string Name { get; set; }
        }
        [DataContract]
        public class Person1
        {
            [DataMember(Name = "aGe")]
            public int Age { get; set; }

            [DataMember(Name = "NaME")]
            public string Name { get; set; }
        }
    }

}

以上就是我自己写的一个Demo来搞序列化对象成为我想要的对象大小写。

输出如下:

 我个人认为方法三才是真正能实现我的需求,其他两种都有相对应的弊端。

 也可能方法用法不对。也希望大神能多多指教。

标签:obj,C#,System,大小写,var,using,序列化,public
From: https://www.cnblogs.com/hanyiblog/p/17514615.html

相关文章

  • Git Credential Manger账号密码查看
      ......
  • .bashrc alias
    找到这个$HOME/.bashrc$HOME的意思是你的home目录,一般是/home/xxx/,xxx是你的登陆用户名.bashrc是个隐藏文件,可以在家目录下面用ls-a看到~/.bash_profile是交互式、login方式进入bash运行的~/.bashrc是交互式non-login方式进入bash运行的通常二者设置大致相同,所以通常前......
  • 初入前端-CSS(1)
    CSSCSS介绍CSS(CascadingStyleSheets)是一种用于描述网页样式和布局的样式表语言。它与HTML配合使用,用于控制网页中元素的外观和排版。CSS样式由选择器和声明块组成。选择器指定要应用样式的HTML元素,而声明块包含一个或多个属性-值对,定义元素的样式。下面是一个基本的......
  • 初入前端-CSS(2)
    盒模型盒模型(BoxModel)是CSS中用于布局和定位元素的基本概念之一。它描述了一个元素在页面中所占据的空间,并定义了元素的内容、内边距、边框和外边距之间的关系。盒模型由以下四个部分组成:内容区域(Content):指的是元素的实际内容,例如文本、图像等。内边距(Padding):内边距是围......
  • 2023智能系统与人机交互国际会议(ISHCI2023)
    2023智能系统与人机交互国际会议(ISHCI2023)由中国湖北众科自然科学研究院主办,将于2023年10月20-21日在中国武汉召开。会议每年举办一届,成为人们在智能系统和人机交互及相关领域交流观点和经验的理想平台。我们热烈邀请您为ISHCI2023做出贡献和参与。★重要信息会议时间:2023年10......
  • 记录pc网站微信登录(内嵌二维码方式)
    官方文档地址:https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Wechat_Login.html第一步:引入官方js  http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js或者把js下载下来放到自己项目里引用 好处是可以自己修改一些东西!(functio......
  • CentOS 7 下/etc/ssh/sshd_config 文件解释
    CentOS7下/etc/ssh/sshd_config文件详解SSH由客户端和服务端的软件组成,在客户端可以使用的软件有SecureCRT、putty、Xshell等,而在服务器端运行的是一个sshd的服务,通过使用SSH,可以把所有传输的数据进行加密,而且也能够防止dns和IP欺骗,此外,SSH传输的数据是经过压缩的,可以加快传输......
  • CISCO ASA使用capture命令可以进行抓包操作
    1.创建抓包ACL首先,创建一个访问控制列表(ACL),用于定义要抓取的流量。例如,要捕获从内部网络到外部网络的HTTP流量,可以创建一个ACL规则如下:access-listcapture_aclextendedpermittcpanyanyeqhttp这个ACL规则允许从任何源IP地址到任何目标IP地址的HTTP流量通过。2.创建......
  • excel VBA中如何模拟键盘输入
    SendKeys语句将一个或多个按键消息发送到活动窗口,就如同在键盘上进行输入一样。语法SendKeysstring[,wait]SendKeys语句的语法具有以下几个:部分 描述string 必需的。,指定要发送的按键消息。Wait 可选的。指定等待方式的[email protected]值。如果为......
  • clop勒索软件攻击活动频发,西门子能源中招
     自6月初被通报利用MOVEitTransfer服务器中的零日漏洞窃取加密组织数据后,clop勒索软件攻击活动频繁,全球陆续发生了多起clop软件攻击事件。本周,Clop团伙在其数据泄露网站上列出了西门子能源公司的信息,表示该公司的数据被泄露。西门子能源公司业务遍及全球,涉及设计、开发和制造......