C#——对象转换为JSON格式的字符串

本文介绍了如何在C#中将对象转换为JSON格式的字符串,详细讲解了转换的过程,并提供了一个示例,包括创建类、使用JavaScriptSerializer进行转换,以及在实际项目中的应用。文章还探讨了转换的原因和在不同场景下的应用。

问题来源

这几日正值伏天,我发现成都不是下大雨就是烈日炎炎的天气。七月上旬车子也坏掉了,去南门体育管健身房要走20来分钟,再回到研究院大楼又是20多分钟,一路上不是大雨就是烈日,还好锻炼后多巴胺让我持续维持一天极好的心情。实验室实在凉快,下面趁着休息总结一下今天所学——我们的项目需要从页面接受JSON格式的字符串,并把它发送给后台服务器。

实例分析

JSON的基础知识就不在这里赘述,可以参考这里。今天的主题是:如何把对象转化为JSON? 转换之前首先看下面的说明。

1. C#或C++等编程语言中的class、struct等可以认为是数据结构,它们存放类的属性和方法,一般类都有数据成员。

2. JSON是一种轻量级的文本数据交换格式,它存放数据。JSON 最常见的用法之一,是从 web 服务器上读取 JSON 数据(作为文件或作为 HttpRequest),将 JSON 数据转换为 JavaScript 对象,然后在网页中使用该数据。

那么如何将对象转化为JSON呢?实质上就是数据和类的关系,既然JSON存放数据,类也可以存放数据,那么它们肯定可以相互转化,并且在实际项目中需要我们把类对象转化为JSON,方便数据在网络上传输。。。

1. 首先我们创建一个MyInfo类,该类数据成员存储姓名,性别及年龄,并在该类中定义构造方法。代码如下:

public class MyInfo {
        public string Name { get; set; }
        public string Sex { get; set; }
        public int Age { get; set; }
        public MyInfo(string Name, string Sex, int Age) 
        {
            this.Name = Name;
            this.Sex = Sex;
            this.Age = Age;
        }

        public MyInfo(string Name) {
            this.Name = Name;
        }
    }
2. 如何转换为JSON?我利用类存储数据,把类中数据转换到JSON中,其实这很简单,我们可使用.net封装好的方法,获取JSON的代码如下:

public static string GetJson(MyInfo myInfo)
        {
            StringBuilder stringBuilder = new StringBuilder();
            JavaScriptSerializer json = new JavaScriptSerializer();
            json.Serialize(myInfo, stringBuilder);
            return stringBuilder.ToString();

            // 和下面的代码有同样的效果
            //JavaScriptSerializer json = new JavaScriptSerializer();
            //return json.Serialize(myInfo);
        }

GetJson方法的参数是MyInfo实例,是因为我们要把类对象转换为JSON。数据的输入是类对象,输出(即返回值)是我们想要的JSON格式的字符串。这里需要注意的是:使用JavaScriptSerializer前需要在代码中引入:

using System.Web.Script.Serialization;//须引用~Framework\v3.5\System.Web.Extensions.dll。

完整代码如下:

using System;
using System.Collections.Generic;
using System.Text;
using System.Web.Script.Serialization;//须引用 ~Framework\v3.5\System.Web.Extensions.dll

namespace ToJson
{
    public class MyInfo {
        public string Name { get; set; }
        public string Sex { get; set; }
        public int Age { get; set; }
        public MyInfo(string Name, string Sex, int Age) 
        {
            this.Name = Name;
            this.Sex = Sex;
            this.Age = Age;
        }

        public MyInfo(string Name) {
            this.Name = Name;
        }
    }
    class Test
    {
        public static string GetJson(object o)
        {
            JavaScriptSerializer json = new JavaScriptSerializer();
            return json.Serialize(o);
        }

        // 对象--->JSON
        public static string GetJson(MyInfo myInfo)
        {
            StringBuilder stringBuilder = new StringBuilder();
            JavaScriptSerializer json = new JavaScriptSerializer();
            json.Serialize(myInfo, stringBuilder);
            return stringBuilder.ToString();

            // 和下面的代码有同样的效果
            //JavaScriptSerializer json = new JavaScriptSerializer();
            //return json.Serialize(myInfo);
        }
       
        static void Main(string[] args)
        {
            // 
            List<int> list = new List<int>();
            for (int i = 0; i < 10; i++ )
            {
                list.Add(i);
            }
            string json = GetJson(list);
            Console.Write(json);

            Console.Write("\n");

            //
            string myInfoJson = GetJson(new MyInfo("小明","男",18) );
            Console.Write(myInfoJson);

            string myInfoJson1 = GetJson(new MyInfo("小明"));
            Console.Write(myInfoJson1);

            Console.ReadLine();
        }
    }
}
运行结果如下图所示:

在项目中的运用

这里我假想一下:大家在淘宝买宝贝,我们在点击付款按钮后页面会把我们的数据信息反馈给淘宝后台,这其中应该使用了JSON传输数据,并且使用MSMQ技术,哈哈~~假想下。在这篇文章中曾经提到如何使用MSMQ技术发送或接受JSON格式的消息。七月份做的这个项目需要在网站页面上获取数据,并把数据以JSON格式传递给后台。这里我们先浏览一下用于学习的代码:

using System;
using System.Collections.Generic;
using System.Text;
using System.Web.Script.Serialization;//须引用 ~Framework\v3.5\System.Web.Extensions.dll

namespace ToJson
{
    public class ClientMessage
    {
        public string Message { get; set; }
        public int Code { get; set; }
        public bool IsList { get; set; }
        public string Result { get; set; }
        public string MethodName { get; set; }
        public string Remark { get; set; }
        public object Obj { get; set; }
        public ClientMessage() { }

        public ClientMessage(string Message, int Code, bool IsList, string Result, string MethodName)
        {
            this.Message = Message;
            this.Code = Code;
            this.IsList = IsList;
            this.Result = Result;
            this.MethodName = MethodName;

        }
        public ClientMessage(bool IsList, string Result, string Message)
        {
            this.IsList = IsList;
            this.Result = Result;
            this.Message = Message;

        }
        public ClientMessage(bool IsList, string Result, string Message, string Remark)
        {
            this.IsList = IsList;
            this.Result = Result;
            this.Message = Message;
            this.Remark = Remark;
        }
    }

    class Program
    {
        public static string ToJson(object o, ClientMessage message)
        {
            StringBuilder builder = new StringBuilder();
            JavaScriptSerializer servializer = new JavaScriptSerializer();
            string json = servializer.Serialize(o);

            builder.Append("{");
            builder.Append("\"Message\":");
            builder.Append(" \" "+ message.Message +" \" ");
            builder.Append(",");
            builder.Append(" \"list\": ");
            if (message.IsList == false)
            {
                builder.Append("[");
                builder.Append(json);
                builder.Append("]");
            }
            else
                builder.Append(json);
            builder.Append(",");
            builder.Append("\"Result\":");
            builder.Append("\"" + message.Result + "\"");
            builder.Append("}");
            return builder.ToString();
        }
        static void Main(string[] args)
        {
            List<int> list = new List<int>();
            for (int i = 0; i < 10; i++)
            {
                list.Add(i);
            }

            string json =  Program.ToJson(list, new ClientMessage(true, "成功", "输出你想要的string类型的消息"));
            Console.Write(json);

            Console.ReadLine();
        }
    }
}
运行结果为:

分析:ClientMessage类存放我们配电室运维项目抽象出来的电气设备共有的的属性信息,我们要把类中数据成员转换为JSON。细心的小伙伴可以看出来string ToJson(object o, ClientMessage message)这个函数主体和上面的对象转换JSON的函数不太一样,其实它们本质是一样的,上面的使用封装好的方法,下面直接以源码的方式呈现给我们,这样我们会有更多的机会来获取我们想要的JSON数据字符串;记住,你可以在函数体中写任何代码,前提是代码符合你想要数据。这里object o我使用List做测试,实际中它可以是电气设备的各种属性,设备类型或者设备的采集模块列表(类)等。

总结

看完这篇文章,你应该掌握:

1. 如何将对象转换为JSON? 

2. 为什么要转换?

2. 如何将对象转换为适应我们项目的JSON?



【论文复现】一种基于价格弹性矩阵的居民峰谷分时电价激励策略【需求响应】(Matlab代码实现)内容概要:本文介绍了一种基于价格弹性矩阵的居民峰谷分时电价激励策略,旨在通过需求响应机制优化电力系统的负荷分布。该研究利用Matlab进行代码实现,构建了居民用电行为与电价变动之间的价格弹性模型,通过分析不同时间段电价调整对用户用电习惯的影响,设计合理的峰谷电价方案,引导用户错峰用电,从而实现电网负荷的削峰填谷,提升电力系统运行效率与稳定性。文中详细阐述了价格弹性矩阵的构建方法、优化目标函数的设计以及求解算法的实现过程,并通过仿真验证了所提策略的有效性。; 适合人群:具备一定电力系统基础知识和Matlab编程能力,从事需求响应、电价机制研究或智能电网优化等相关领域的科研人员及研究生。; 使用场景及目标:①研究居民用电行为对电价变化的响应特性;②设计并仿真基于价格弹性矩阵的峰谷分时电价激励策略;③实现需求响应下的电力负荷优化调度;④为电力公司制定科学合理的电价政策提供理论支持和技术工具。; 阅读建议:建议读者结合提供的Matlab代码进行实践操作,深入理解价格弹性建模与优化求解过程,同时可参考文中方法拓展至其他需求响应场景,如工业用户、商业楼宇等,进一步提升研究的广度与深度。
针对TC275微控制器平台,基于AUTOSAR标准的引导加载程序实现方案 本方案详细阐述了一种专为英飞凌TC275系列微控制器设计的引导加载系统。该系统严格遵循汽车开放系统架构(AUTOSAR)规范进行开发,旨在实现可靠的应用程序刷写与启动管理功能。 核心设计严格遵循AUTOSAR分层软件架构。基础软件模块(BSW)的配置与管理完全符合标准要求,确保了与不同AUTOSAR兼容工具链及软件组件的无缝集成。引导加载程序本身作为独立的软件实体,实现了与上层应用软件的完全解耦,其功能涵盖启动阶段的硬件初始化、完整性校验、程序跳转逻辑以及通过指定通信接口(如CAN或以太网)接收和验证新软件数据包。 在具体实现层面,工程代码重点处理了TC275芯片特有的多核架构与内存映射机制。代码包含了对所有必要外设驱动(如Flash存储器驱动、通信控制器驱动)的初始化与抽象层封装,并设计了严谨的故障安全机制与回滚策略,以确保在软件更新过程中出现意外中断时,系统能够恢复到已知的稳定状态。整个引导流程的设计充分考虑了时序确定性、资源占用优化以及功能安全相关需求,为汽车电子控制单元的固件维护与升级提供了符合行业标准的底层支持。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
### 如何使用 GitHub Personal Access Token 进行克隆 当遇到 `remote: Invalid username or password` 错误时,这通常是由于身份验证失败引起的。为了更安全地访问私有仓库并避免此类错误,建议使用 GitHub Personal Access Token (PAT) 来代替密码。 #### 创建个人访问令牌 要创建一个新的 PAT,请按照以下步骤操作: 1. 登录到 GitHub 账户; 2. 访问设置页面中的开发者选项卡下的 "Personal access tokens" 部分; 3. 单击 “Generate new token”,为新令牌指定描述性的名称,并授予所需的权限范围; 4. 复制生成的令牌字符串,在后续命令中作为密码输入[^2]; #### 使用 HTTPS URL 和 PAT 克隆仓库 对于通过 HTTPS 方式的 Git 操作,可以在 URL 中嵌入令牌来完成认证过程。具体做法是在原始仓库地址前加上用户名和刚刚复制好的 PAT 字符串,格式如下所示: ```bash https://<username>:<personal_access_token>@github.com/<owner>/<repository>.git ``` 例如,如果希望从名为 `eurydyce` 的用户那里拉取 MDANSE 项目的最新更改,则应执行下面这条指令来进行克隆动作: ```bash $ git clone https://your_username:your_personal_access_token@github.com/eurydyce/MDANSE.git ``` 请注意替换 `<your_username>` 及 `<your_personal_access_token>` 为你自己的实际值。 另外一种方式是先正常克隆不带凭证信息的远程仓库链接,之后再利用缓存机制或配置全局辅助工具保存登录状态以便简化流程。比如可以通过 SSH key 或者 Credential Helper 实现自动填充账号密码的功能[^1]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值