C# 对象的序列化与反序列化 (DataContractJsonSerializer)
项目引用
System.Runtime.Serialization.dll
添加命名空间
using System.Runtime.Serialization.Json;
1.序列化对象,得到Json字符串
public static string WriteFromObject<T>(T obj) where T : class
{
DataContractJsonSerializer dcjs = new DataContractJsonSerializer(typeof(T));
using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
{
dcjs.WriteObject(ms, obj);
//ms.Position = 0;
//byte[] bt = new byte[ms.Length];
//ms.Read(bt, 0, bt.Length);
//return Encoding.Default.GetString(bt);
return Encoding.Default.GetString(ms.ToArray());
}
}
2.反序列化对象 ,从Json字符串中得到对象
public static T ReadToObject<T>(string json) where T : class
{
DataContractJsonSerializer dcjs = new DataContractJsonSerializer(typeof(T));
using (System.IO.MemoryStream ms = new System.IO.MemoryStream(Encoding.Default.GetBytes(json)))
{
return dcjs.ReadObject(ms) as T;
}
}
3.对象示例
/// 实现可序列化数据协定
[System.Runtime.Serialization.DataContract]
/// 识别方法返回类型
[System.Runtime.Serialization.KnownType("KnownType")]
public class ClassSample
{
/// 可被序列化成员
[System.Runtime.Serialization.DataMember]
public int DataMember { get; set; }
/// 枚举成员也要序列化
[System.Runtime.Serialization.EnumMember]
public Example EnumMember;
/// 非数据协定成员忽略序列化
[System.Runtime.Serialization.IgnoreDataMember]
public int IgnoreDataMember { get; set; }
/// 序列化时可缺少的字段
[System.Runtime.Serialization.OptionalField]
public int OptionalField; //反序列化后立即调用
[System.Runtime.Serialization.OnDeserialized]
//反序列化时调用
[System.Runtime.Serialization.OnDeserializing]
//在序列化该对象图后是否调用该方法
[System.Runtime.Serialization.OnSerialized]
//在对象序列化前调用此方法
[System.Runtime.Serialization.OnSerializing]
public KnownType KnownType()
{
return null;
}
}
[System.Runtime.Serialization.DataContract]
public enum Example
{ }
[System.Runtime.Serialization.DataContract]
public class KnownType
{ }
C# 对象的序列化与反序列化 (DataContractJsonSerializer)的更多相关文章
- java中对象的序列化和反序列化
[对象的序列化和反序列化 ] 1.定义:序列化--将对象写到一个输出流中.反序列化则是从一个输入流中读取一个对象.类中的成员必须是可序列化的,而且要实现Serializable接口,这样的类的对象才能 ...
- Java对象的序列化与反序列化
序列化与反序列化 序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程.一般将一个对象存储至一个储存媒介,例如档案或是记亿体缓冲等.在网络传输过程中,可以是字节或是 ...
- Java对象的序列化和反序列化[转]
Java基础学习总结--Java对象的序列化和反序列化 一.序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化.把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种用 ...
- 【Java IO流】对象的序列化和反序列化
对象的序列化和反序列化 1)对象序列化,就是将Object对象转换成byte序列,反之叫对象的反序列化. 2)序列化流(ObjectOutputStream),是字节的过滤流—— writeObjec ...
- Java对象的序列化与反序列化-Json篇
说到Java对象的序列化与反序列化,我们首先想到的应该是Java的Serializable接口,这玩意在两个系统之间的DTO对象里面可能会用到,用于系统之间的数据传输.或者在RPC(远程方法调用)时可 ...
- 利用JavaScriptSerializer类 进行Json对象的序列化和反序列化和过滤
项目下载:JavaScriptSerializer_对JSON对象序列化与反序列化及过滤器 利用<JavascriptSerializer类> 进行Json对象的序列化和反序列化 1. 首 ...
- 对象的序列化与反序列化---IO学习笔记(四)
对象的序列化,反序列化 对象的序列化: 就是将Object转换成byte序列 对象的反序列化: 将byte序列转换成Object 序列化流.反序列化流 序列化流(ObjectOutputStream) ...
- 第12讲-Java中的IO操作及对象的序列化与反序列化
1.知识点 1.1.课程回顾 1.2.本章重点 1.2.1 io操作 1.2.2 对象的序列化与反序列化 2.具体内容 2.1.Java IO 2.1.1.什么是IO IO其实就是输入.输出 I ...
- (记录)Jedis存放对象和读取对象--Java序列化与反序列化
一.理论分析 在学习Redis中的Jedis这一部分的时候,要使用到Protostuff(Protobuf的Java客户端)这一序列化工具.一开始看到序列化这些字眼的时候,感觉到一头雾水.于是,参考了 ...
随机推荐
- linux下常用关机命令
linux下常用的关机命令有:shutdown.halt.poweroff.init:重启命令有:reboot.下面本文就主要介绍一些常用的关机命令以及各种关机命令之间的区别和具体用法. 首先来看一下 ...
- 基于SVG的JS地图插件
一:D3(Data-Driven Documents) 官网地址:http://d3js.org/ 功能非常强大(不支持IE8) D3 是最流行的可视化库之一,它被很多其他的表格插件所使用.它允许绑定 ...
- 20145330第七周《Java学习笔记》
20145330第七周<Java学习笔记> 第十三章 时间与日期 认识时间与日期 时间的度量 GMT(格林威治标准时间):现在不是标准时间 世界时(UT):1972年UTC出来之前,UT等 ...
- Java 仿迅雷多线程下载
package net.webjoy.jackluo.android_json; /** * 1.http Range "bytes="+ start+end * 2.Random ...
- Oracle 新手问答
存储过程中,return后,如果没有写明提交(commit)或回滚(rollback),会默认提交吗?答:不会.如果修改了数据,又没有写明,则会将数据锁定在那里! 存储过程中,调用子存储过程异常时,在 ...
- OSG-OSGEarth
OSG-OSGEarth 初次使用Cmake——以OsgEarth工程创建为例 转:http://www.cnblogs.com/Realh/archive/2012/02/08/2342507.ht ...
- 开源工作流引擎CCFlow 学习专区
http://bbs.ccflow.org/index.aspx 官网:http://www.ccflow.org/
- .net的五层架构
原文章地址是http://www.360doc.com/content/11/1210/21/19147_171335782.shtml 我们刚开始学习架构的时候,首先会想到分层的概念,分层架构比较经 ...
- error while loading shared libraries: libXXX.so.x: cannot open shared object file: No such file or directory .
转载:http://www.eefocus.com/pengwr/blog/2012-02/235057_baf52.html 此时你可以locate libXXX.so.x 一下,查看系统里是否有该 ...
- QSpinBox 和 QSlider 联合使用方法
在Qt中,有时候我们想要联合QSpinBox 和 QSlider,使得移动滑块,QSpinBox中的数据会变化,或者我们在QSpinBox中输入一个数值,响应的滑块也会变化,如下图所示: