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?



评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值