C#实现JSON序列化与反序列化
JSON的数据类型:
- number:和JavaScript的number完全一致;
- boolean:就是JavaScript的true或false;
- string:就是JavaScript的string;
- null:就是JavaScript的null;
- array:就是JavaScript的Array表示方式——[];
- object:就是JavaScript的{ ... }表示方式。
以及上面的任意组合。并且,JSON还定死了字符集必须是UTF-8。为了统一解析,JSON的字符串规定必须用双引号"",Object的键也必须用双引号"",如果JSON中含有转义字符,则需要转义。
// 序列化
private string ObjectToJson(Person obj)
{
JavaScriptSerializer jsonSerialize = new JavaScriptSerializer();
return jsonSerialize.Serialize(obj);
}
// 反序列化
private Person JsonToObject(string jsonStr)
{
JavaScriptSerializer jsonSerialize = new JavaScriptSerializer();
return jsonSerialize.Deserialize<Person>(jsonStr);
}
注:可用 [ScriptIgnore] 标记不序列化的属性
2、使用 DataContractJsonSerializer类实现序列化
namespace:System.Runtime.Serialization.Json
eg:
// 序列化
using (MemoryStream stream =new MemoryStream())
{
DataContractJsonSerializer jsonSerialize =new DataContractJsonSerializer(Person);
jsonSerialize.WriteObject(stream, obj);
jsonStr = Encoding.UTF8.GetString(stream.ToArray());
}
// 反序列化
using (MemoryStream stream =new MemoryStream(Encoding.UTF8.GetBytes(jsonStr)))
{
DataContractJsonSerializer jsonSerialize =new DataContractJsonSerializer(Person);
obj = (Person)jsonSerialize.ReadObject(stream);
}
注:可用 [IgnoreDataMember] 标记不序列化的属性
3、使用开源类库Newtonsoft.Json实现序列化
namespace:Newtonsoft.Json
eg:
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq; namespace DataInterface
{
public partial class UserLogin : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string errMsg = string.Empty;
if (Request["JsonString"] != null)
{
string jsonString = Request["JsonString"].ToString();
JObject array;
string userName = string.Empty, password = string.Empty;
try
{
array = (JObject)JsonConvert.DeserializeObject(jsonString);
userName = array["userName"].ToString().Trim('"');
password = array["password"].ToString().Trim('"').ToUpper();
}
catch
{
errMsg = "传入参数错误";
}
}
}
}
}
string jsonText = string.Empty;
StringWriter sw = new StringWriter();
JsonWriter writer = new JsonTextWriter(sw); writer.WriteStartObject();
writer.WritePropertyName("result");
writer.WriteValue("");
writer.WritePropertyName("msg");
writer.WriteValue("sucess");
writer.WriteEndObject();
writer.Flush();
jsonText = sw.GetStringBuilder().ToString();
C#实现JSON序列化与反序列化的更多相关文章
- DotNet的JSON序列化与反序列化
JSON(JavaScript Object Notation)JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式.在现在的通信中,较多的采用JSON数据格式,JSON有 ...
- C#中JSON序列化和反序列化
有一段时间没有到博客园写技术博客了,不过每天逛逛博客园中大牛的博客还是有的,学无止境…… 最近在写些调用他人接口的程序,用到了大量的JSON.XML序列化和反序列化,今天就来总结下json的序列化和反 ...
- Newtonsoft.Json 序列化和反序列化 时间格式
From : http://www.cnblogs.com/litian/p/3870975.html 1.JSON序列化 string JsonStr= JsonConvert.SerializeO ...
- Net中JSON序列化和反序列化处理(日期时间特殊处理)
0 缘由 笔者最近在web api端使用Json.Net进行序列化处理,而在调用端使用DataContractSerializer进行反序列化,遇到日期时间处理反序列化不成功[备注:笔者使用Net ...
- Newtonsoft.Json 序列化和反序列化 时间格式 [转]
1.JSON序列化 string JsonStr= JsonConvert.SerializeObject(Entity); eg: A a=new A(); a.Name="Elain ...
- C# JSON 序列化和反序列化——JavaScriptSerializer实现
一. JavaScriptSerializer 类由异步通信层内部使用,用于序列化和反序列化在浏览器和 Web 服务器之间传递的数据.您无法访问序列化程序的此实例.但是,此类公开了公共 API.因此, ...
- 序列化对象C++对象的JSON序列化与反序列化探索
新手发帖,很多方面都是刚入门,有错误的地方请大家见谅,欢迎批评指正 一:背景 作为一名C++开发人员,我始终很期待能够像C#与JAVA那样,可以省力的进行对象的序列化与反序列化,但到现在为止,还没有找 ...
- C++对象的JSON序列化与反序列化探索完结-列表的序列化与反序列化
在前两篇文章中,我们已经完成对普通对象以及复杂对象嵌套的序列化与反序列化,见如下地址: C++对象的JSON序列化与反序列化探索 C++对象的JSON序列化与反序列化探索续-复杂对象的序列化与反序列化 ...
- C++对象的JSON序列化与反序列化探索续-复杂对象的序列化与反序列化
本文是基本上一篇博文进行改进而成,上一篇请见: C++对象的JSON序列化与反序列化探索 此处就不多说了,直接上代码. 1. 序列化基类 #pragma once #include <strin ...
- C++对象的JSON序列化与反序列化探索
一:背景 作为一名C++开发人员,我一直很期待能够像C#与JAVA那样,可以轻松的进行对象的序列化与反序列化,但到目前为止,尚未找到相对完美的解决方案. 本文旨在抛砖引玉,期待有更好的解决方案:同时向 ...
随机推荐
- 封装tip控件
在界面上有时需要显示一个提示,大多的前端框架都把提示做成一个带有小尖角的提示框,因此自己也仿照了实现了一下,效果图如下: 尖角的实现很简单的,一般都是通过css将div的宽高设置为0,然后将尖角朝向的 ...
- Effective c++
static 声明在堆上申请静态存储 对于局部变量,将存储方式改为静态存储 对于全局变量,将连接方式局限在文件内 类中static变量:属于整个类,独立存储,没有this指针 inline inlin ...
- stimulsoft Report报表使用笔记
1.使用设计器设计mrt报表模板,或者从其他文件复制修改 2.删除business object 数据源 3.使用代码添加数据源 ParcelChangeItem change = new Parce ...
- NHibernate系列文章二十二:NHibernate查询之HQL查询(附程序下载)
摘要 NHibernate提供了多种查询方式,最早的HQL语言查询.Criteria查询和SQL Query,到NHibernate 3.0的Linq NHibernate,NHIbernate 4. ...
- python中的浅拷贝和深拷贝
1.赋值语句 a = 'abc' b = a print id(a) print id(b) # id(a):29283464 # id(b):29283464 通过简单的复制,我们可以看到,a b其 ...
- projecteuler Summation of primes
The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17. Find the sum of all the primes below two milli ...
- Web APi之安装配置实现Cors跨域
参考:http://www.cnblogs.com/CreateMyself/p/4836628.html 1.通过NuGet下载程序包,搜索程序包[Microsoft.AspNet.WebApi.C ...
- 41、javaMail机制
SMTP 是一种TCP协议支持的提供可靠且有效电子邮件传输的应用层协议.SMTP 是建立在 TCP上的一种邮件服务,主要用于传输系统之间的邮件信息并提供来信有关的通知. package com.ith ...
- C# List集合Group by查询
C# List集合Group by查询 //根据企业ID.类型.配置ID进行分组: var groupList = chRCheckConfirmList .GroupBy(x => new { ...
- 深入浅出讲解:php的socket通信
对TCP/IP.UDP.Socket编程这些词你不会很陌生吧?随着网络技术的发展,这些词充斥着我们的耳朵.那么我想问:1. 什么是TCP/IP.UDP?2. Socke ...