问题来源
这几日正值伏天,我发现成都不是下大雨就是烈日炎炎的天气。七月上旬车子也坏掉了,去南门体育管健身房要走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?
本文介绍了如何在C#中将对象转换为JSON格式的字符串,详细讲解了转换的过程,并提供了一个示例,包括创建类、使用JavaScriptSerializer进行转换,以及在实际项目中的应用。文章还探讨了转换的原因和在不同场景下的应用。
2454

被折叠的 条评论
为什么被折叠?



