.NET进行Json的序列化和反序列化
2010-11-23 00:15
519 查看
最近发现在不同模块交换数据的时候,不仅可以用XML,也可以用Json,而且Jquery与Json格式的数据结合的非常好,方便前台代码操作数据,所以经常把数据转换为Json,输出到网页里,然后获得方把数据进行反序列化。个人觉得如果这个数据时后台操作,可以把数据转换为XML形式输出到网页里,参见我的上篇文章《把XML文件输出到一个网页里》,如果这个对象数据是让前台JavaScript来获得,则需要把数据转换为Json的形式来输出到网页里或一般处理程序(ashx)里比较合适。
1、添加引用System.Runtime.Serialization.Json,System.ServiceModel.Web,见下图
2、首先要导入命名空间
3、完整代码如下:
1、添加引用System.Runtime.Serialization.Json,System.ServiceModel.Web,见下图
2、首先要导入命名空间
//导入相关命名空间 using System.Runtime.Serialization.Json; //DataContractJsonSerializer的命名空间 using System.Text; //Encoding,StringBuilder的命名空间 using System.IO; //MemoryStream的命名空间 using System.Collections.Generic; //List的命名空间
3、完整代码如下:
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
//导入相关命名空间 using System.Runtime.Serialization.Json; //DataContractJsonSerializer的命名空间 using System.Text; //Encoding,StringBuilder的命名空间 using System.IO; //MemoryStream的命名空间 using System.Collections.Generic; //List的命名空间
namespace LxXML
{
public partial class ObjectAndJSon : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
List<Student> list=new List<Student>();
DataTable dt = GetStudentDataSet().Tables[0];
//读取数据到集合里
foreach (DataRow dr in dt.Rows)
{
Student stu = new Student();
stu.StuId = dr["StuId"].ToString();
stu.StuName = dr["StuName"].ToString();
stu.StuSex = dr["StuSex"].ToString();
stu.StuAge =int.Parse( dr["StuAge"].ToString());
stu.StuAddress = dr["StuAddress"].ToString();
list.Add(stu);
}
//将对象序列化为Json数据
string output = ObjectToJsonTwo(list);
Response.Write(output + "<br/><br/>");
//将JSON字符串反序列化为对象
JsonToObject(output);
}
/// <summary>
/// 将JSON字符串反序列化为对象
/// </summary>
/// <param name="strJson">Json字符串</param>
public void JsonToObject(string strJson)
{
DataContractJsonSerializer deSerializer = new DataContractJsonSerializer(typeof(List<Student>));
using(MemoryStream memoryStre=new MemoryStream(Encoding.UTF8.GetBytes(strJson))){
List<Student> list = deSerializer.ReadObject(memoryStre) as List<Student>;
foreach (Student stu in list)
{
Response.Write("ID=" + stu.StuId.ToString()+"<br/>");
Response.Write("StuName=" + stu.StuName.ToString() + "<br/>");
Response.Write("StuSex=" + stu.StuSex.ToString() + "<br/>");
Response.Write("StuAge=" + stu.StuAge.ToString() + "<br/>");
Response.Write("StuAddress=" + stu.StuAddress.ToString() + "<br/><br/>");
}
}
}
/// <summary>
/// 将对象转化成Json字符串,方法一
/// </summary>
/// <param name="obj">需要格式化的对象</param>
/// <returns>Json字符串</returns>
public string ObjectToJsonOne(object obj)
{
string output = string.Empty;
DataContractJsonSerializer dataSerializer = new DataContractJsonSerializer(obj.GetType());
using (MemoryStream ms = new MemoryStream())
{
dataSerializer.WriteObject(ms, obj);
output = Encoding.UTF8.GetString(ms.ToArray());
}
return output;
}
/// <summary>
/// 将对象转化成Json字符串,方法二
/// </summary>
/// <param name="obj">需要格式化的对象</param>
/// <returns>Json字符串</returns>
public string ObjectToJsonTwo(object obj)
{
// 首先,当然是JSON序列化
DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
// 定义一个stream用来存发序列化之后的内容
Stream stream = new MemoryStream();
serializer.WriteObject(stream, obj);
// 从头到尾将stream读取成一个字符串形式的数据,并且返回
stream.Position = 0;
StreamReader streamReader = new StreamReader(stream);
return streamReader.ReadToEnd();
}
//测试数据,当然正式开发DataSet里的数据应该来自数据库
public DataSet GetStudentDataSet()
{
DataSet ds = new DataSet("School"); //给DataSet起名,作为跟节点
DataTable dt = ds.Tables.Add("Student");//给DataTable起名,作为下一个节点
//DataTable dt = new DataTable("Student");
dt.Columns.Add("StuId", typeof(string));
dt.Columns.Add("StuName", typeof(string));
dt.Columns.Add("StuSex", typeof(string));
dt.Columns.Add("StuAge", typeof(int));
dt.Columns.Add("StuAddress", typeof(string));
DataRow row = dt.NewRow();
row["StuId"] = "001";
row["StuName"] = "李大力";
row["StuSex"] = "男";
row["StuAge"] = 20;
row["StuAddress"] = "辽宁省大连市";
dt.Rows.Add(row);
row = dt.NewRow();
row["StuId"] = "002";
row["StuName"] = "崔锡华";
row["StuSex"] = "女";
row["StuAge"] = 24;
row["StuAddress"] = "吉林省延吉市";
dt.Rows.Add(row);
row = dt.NewRow();
row["StuId"] = "004";
row["StuName"] = "张叶挺";
row["StuSex"] = "男";
row["StuAge"] = 33;
row["StuAddress"] = "广东省深圳市";
dt.Rows.Add(row);
//ds.Tables.Add(dt);
return ds;
}
}
//建立一个学生的Model
public class Student
{
public string StuId
{
get;
set;
}
public string StuName
{
get;
set;
}
public string StuSex
{
get;
set;
}
public int StuAge
{
get;
set;
}
public string StuAddress
{
get;
set;
}
}
}
相关文章推荐
- .NET中JSON数据进行序列化和反序列化
- .NET中JSON数据进行序列化和反序列化
- .Net——使用DataContractJsonSerializer进行序列化及反序列化基本操作
- .Net——使用DataContractJsonSerializer进行序列化及反序列化基本操作
- .NET中JSON数据进行序列化和反序列化
- .Net——使用DataContractJsonSerializer进行序列化及反序列化基本操作
- XStream java对象和json文件进行序列化和反序列化
- 使用JSON JavaScriptSerializer进行反序列化和序列化时报错,字符的长度超出了MaxJsonLength的长度
- 使用JSON JavaScriptSerializer 进行序列化或反序列化时出错。字符串的长度超过了为 maxJsonLength属性
- 关于JSON.NET中对json的序列化和反序列化
- .NET JSON对象序列化和反序列化
- ASP.NET中JSON如何对时间进行序列化和反序列化
- .NET 2.0 使用最新版的JSON.net 进行反序列化
- [ServiceStack.Text] .net序列化,反序列化组件(号称最快,支持 JSON,XML,JSV格式)
- 使用JSON JavaScriptSerializer 进行序列化或反序列化时出错。字符串的长度超过了为 maxJsonLength属性
- c# 读取json 写json 序列化与反序列化 .net 4.0
- .Net 中关于序列化和反序列化Json的方法
- 使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错
- jackson进行json序列化和反序列化
- 在 .NET 3.5 中序列化和反序列化 JSON