C# JSON 序列化
1、JavaScriptSerializer
System.Web.Extensions.dll
System.Web.Script.Serialization命名空间
Serialize
Deserialize
http://www.cnblogs.com/dwfbenben/archive/2013/06/06/3122662.html
http://www.cnblogs.com/xiaolifeidao/archive/2013/01/28/2879523.html
2、Newtonsoft
http://www.newtonsoft.com/json
download 添加引用 :Newtonsoft.Json.dll
http://www.cnblogs.com/yanweidie/p/4605212.html
JsonConvert
数组序列化
using Newtonsoft.Json;
using Newtonsoft.Json.Linq; private void button1_Click(object sender, EventArgs e)
{ string str;
Dictionary<string, string> dic = new Dictionary<string, string>();
dic.Add("id", "");
dic.Add("name", "kitty");
//数组、对象序列化成字符串
str = JsonConvert.SerializeObject(dic);
this.richTextBox1.Text = str;
//{"id":"0002","name":"kitty"} //反序列化成对象、数组
var aobj= JsonConvert.DeserializeObject<Dictionary<string,string>>(str);
this.Text = aobj["id"].ToString().Trim();
this.Text = aobj["name"];
}
类序列化 JsonConvert与JavaScriptSerializer结果相同。JsonConvert把对象序列化成json串,用JavaScriptSerializer反序列化也是可以的。
public class Person
{
public Person()
{ }
public Person(int id, string name, int age)
{
this.Id = id;
this.Name = name;
this.Age = age;
}
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
JavaScriptSerializer
private void button2_Click(object sender, EventArgs e)
{
JavaScriptSerializer jss = new JavaScriptSerializer();
Person pp=new Person(,"kitty",); //对象序列化为json字符串
this.richTextBox1.Text= jss.Serialize(pp); //json串反序列化为对象
Person p2 = jss.Deserialize<Person>(this.richTextBox1.Text);
this.Text = p2.Id.ToString();
}
JsonConvert
private void button3_Click(object sender, EventArgs e)
{
Person pp = new Person(, "kitty", );
this.richTextBox1.Text =JsonConvert.SerializeObject(pp); Person p2 = JsonConvert.DeserializeObject<Person>(this.richTextBox1.Text);
this.Text = p2.Name; }
datatable序列化为json串
方法1简单
DataTable dt = new DataTable();
dt.Columns.Add("id");
dt.Columns.Add("name");
dt.Rows.Add(, "aaa");
dt.Rows.Add(, "bbb");
dt.Rows.Add(, "ccc");
dt.Rows.Add(, "eee");
//dataTable序列化为json字符串
this.richTextBox1.Text = JsonConvert.SerializeObject(dt);
//json串反序列化为dataTable
var dtnew = JsonConvert.DeserializeObject<DataTable>(richTextBox1.Text);
this.Text = dtnew.Rows.Count.ToString();
[{"id":"1","name":"aaa"},{"id":"2","name":"bbb"},{"id":"3","name":"ccc"},{"id":"4","name":"eee"}]
Newtonsoft.Json.JsonConvert.SerializeObject
方法二
private void button5_Click(object sender, EventArgs e)
{
DataTable dt = new DataTable();
dt.Columns.Add("id");
dt.Columns.Add("name");
dt.Rows.Add(, "aaa");
dt.Rows.Add(, "bbb");
dt.Rows.Add(, "ccc");
dt.Rows.Add(, "eee"); JavaScriptSerializer jss = new JavaScriptSerializer();
jss.RegisterConverters(new JavaScriptConverter[]{new DataTableConverter()});
this.richTextBox1.Text = jss.Serialize(dt); } public class DataTableConverter : JavaScriptConverter
{
public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer)
{
DataTable dt = obj as DataTable;
Dictionary<string, object> result = new Dictionary<string, object>(); List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>(); foreach (DataRow dr in dt.Rows)
{
Dictionary<string, object> row = new Dictionary<string, object>();
foreach (DataColumn dc in dt.Columns)
{
row.Add(dc.ColumnName, dr[dc.ColumnName]);
}
rows.Add(row);
} result["Rows"] = rows; return result;
} public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer)
{
throw new NotImplementedException();
} /// <summary>
/// 获取本转换器支持的类型
/// </summary>
public override IEnumerable<Type> SupportedTypes
{
get { return new Type[] { typeof(DataTable) }; }
}
}
.net 4.5
JsonReader reader = new JsonReader(new StringReader(jsonText));
error,无法创建抽象类或接口“Newtonsoft.Json.JsonWriter”的实例
like this ok:
写json
WriteStartArray、WriteStartObject,与end WriteEndObject成对出现。
StringWriter sw = new StringWriter();
JsonWriter writer = new JsonTextWriter(sw);
writer.Formatting = Formatting.Indented;
writer.WriteStartObject();
writer.WritePropertyName("myparams");
writer.WriteStartObject();
writer.WritePropertyName("id");
writer.WriteValue("");
writer.WritePropertyName("name");
writer.WriteValue("kitty");
writer.WritePropertyName("age");
writer.WriteValue();
writer.WriteEndObject();
writer.WriteEndObject();
writer.Flush();
sw.Close();
this.richTextBox1.Text = sw.GetStringBuilder().ToString();
解析读json
Newtonsoft.Json.JsonReader reader = new JsonTextReader(new StringReader(this.richTextBox1.Text));
while (reader.Read())
{
this.listBox1.Items.Add(reader.TokenType);
}
C# JSON 序列化的更多相关文章
- .Net深入实战系列—JSON序列化那点事儿
序 当前主流的序列化JSON字符串主要有两种方式:JavaScriptSerializer及Json.net(Nuget标识:Newtonsoft.Json).JavaScriptSerializer ...
- Newtonsoft.Json 序列化和反序列化 时间格式【转】
1.JSON序列化 string JsonStr= JsonConvert.SerializeObject(Entity); eg: A a=new A(); a.Name="Elain ...
- [.net 面向对象程序设计进阶] (13) 序列化(Serialization)(五) Json 序列化利器 Newtonsoft.Json 及 通用Json类
[.net 面向对象程序设计进阶] (13) 序列化(Serialization)(五) Json 序列化利器 Newtonsoft.Json 及 通用Json类 本节导读: 关于JSON序列化,不能 ...
- DotNet的JSON序列化与反序列化
JSON(JavaScript Object Notation)JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式.在现在的通信中,较多的采用JSON数据格式,JSON有 ...
- C#中JSON序列化和反序列化
有一段时间没有到博客园写技术博客了,不过每天逛逛博客园中大牛的博客还是有的,学无止境…… 最近在写些调用他人接口的程序,用到了大量的JSON.XML序列化和反序列化,今天就来总结下json的序列化和反 ...
- 使用JSON.Net(Newtonsoft.Json)作为ASP.Net MVC的json序列化和反序列化工具
ASP.Net MVC默认的JSON序列化使用的是微软自己的JavaScriptSerializer.性能低不说,最让人受不了的是Dictionary<,>和Hashtable类型居然对应 ...
- Windows Phone 六、JSON序列化
JSON序列化 public class Person { public int Id { get; set; } public string Name { get; set; } public in ...
- [MVC_Json序列化]MVC之Json序列化循环引用
在做MVC项目时,难免会遇到Json序列化循环引用的问题,大致错误如下 错误1:序列化类型为“...”的对象时检测到循环引用. 错误2:Self referencing loop detected f ...
- NetworkComms V3 使用Json序列化器进行网络通信
刚才在网上闲逛,偶然看到一篇文章 C#(服务器)与Java(客户端)通过Socket传递对象 网址是:http://www.cnblogs.com/iyangyuan/archive/2012/12/ ...
- json序列化时datetime的处理方法
.net自带的json序列化器,JavaScriptSerializer和DataContractJsonSerializer,都是序列化成微软的datetime json格式,e.g. " ...
随机推荐
- Linux CentOS7.0下JAVA安装和配置环境变量
一.前言: CentOS7.0虽然自带JDK1.7和1.8,运行“java -version”命令也可以看到版本信息,但是jdk的安装环境不全,比如缺少tool.jar和dt.jar等,这就导致“ja ...
- windows下的IO模型之事件选择(WSAEventSelect)模型
异步选择模型类似的是,它也允许应用程序在一个或多个套接字上,接收以事件为基础的网络事件通知.对于异步选择模型采用的网络事件来说,它们均可原封不动地移植到事件选择模型.事件选择模型和异步选择模型最主要的 ...
- 牛客网——G送分了(py)
链接:https://www.nowcoder.net/acm/contest/74/G来源:牛客网 题目描述 杭州人称傻乎乎的人为62,而嘟嘟家这里没有这样的习俗. 相比62,他那里的人更加讨厌数字 ...
- cuteftp不能连接虚拟机的解决方法
使用cuteftp在PC和虚拟机之间传送文件 工具/原料 PC机中装有cuteftp软件和虚拟机 注意事项 首先要确保虚拟机中的ftp软件已安装,如未安装可以用如下命令安装 sudo apt-get ...
- Winform开发之窗体显示、关闭与资源释放
Winform的窗体涉及到一般窗体(单文档窗体).MDI窗体.窗体之间的关系等,那么如果调用打开新窗体.如何关闭窗体.窗体资源的释放等都关系到软件运行的效率,本文一一介绍 1.窗体的显示 从一个窗体打 ...
- 为Python编写一个简单的C语言扩展模块
最近在看pytorh方面的东西,不得不承认现在这个东西比较火,有些小好奇,下载了代码发现其中计算部分基本都是C++写的,这真是要我对这个所谓Python语音编写的框架或者说是库感觉到一丢丢的小失落,细 ...
- C语言——第四次作业(2)
作业要求一 项目wordcount 设计思路:输入需统计的文件名,打开此文件,输入功能对应的字符,分别实现对应的功能,关闭文件. 主要代码 #include<stdio.h> #inclu ...
- 设计模式(Python)-观察者模式
本系列文章是希望将软件项目中最常见的设计模式用通俗易懂的语言来讲解清楚,并通过Python来实现,每个设计模式都是围绕如下三个问题: 为什么?即为什么要使用这个设计模式,在使用这个模式之前存在什么样的 ...
- MySql 中的 FIND_IN_SET 的使用和相关问题
MySql 中的 FIND_IN_SET 的使用和相关问题 QQ 群里有人讨论如果在 category_ids 中打开 12 的分类,而 category_ids 中的 ID 是以 逗号分开的. 使用 ...
- Windows自带NAT端口映射,命令行CMD操作即可
由于有需求进行端口映射,又不想装乱七八糟的软件,Windows本身自带的路由远程访问配置太麻烦,还要两块网卡,坑爹啊. 其实Windows本身命令行支持配置端口映射,条件是已经安装了IPV6,启不启用 ...