项目引用

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)的更多相关文章

  1. java中对象的序列化和反序列化

    [对象的序列化和反序列化 ] 1.定义:序列化--将对象写到一个输出流中.反序列化则是从一个输入流中读取一个对象.类中的成员必须是可序列化的,而且要实现Serializable接口,这样的类的对象才能 ...

  2. Java对象的序列化与反序列化

    序列化与反序列化 序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程.一般将一个对象存储至一个储存媒介,例如档案或是记亿体缓冲等.在网络传输过程中,可以是字节或是 ...

  3. Java对象的序列化和反序列化[转]

    Java基础学习总结--Java对象的序列化和反序列化 一.序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化.把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种用 ...

  4. 【Java IO流】对象的序列化和反序列化

    对象的序列化和反序列化 1)对象序列化,就是将Object对象转换成byte序列,反之叫对象的反序列化. 2)序列化流(ObjectOutputStream),是字节的过滤流—— writeObjec ...

  5. Java对象的序列化与反序列化-Json篇

    说到Java对象的序列化与反序列化,我们首先想到的应该是Java的Serializable接口,这玩意在两个系统之间的DTO对象里面可能会用到,用于系统之间的数据传输.或者在RPC(远程方法调用)时可 ...

  6. 利用JavaScriptSerializer类 进行Json对象的序列化和反序列化和过滤

    项目下载:JavaScriptSerializer_对JSON对象序列化与反序列化及过滤器 利用<JavascriptSerializer类> 进行Json对象的序列化和反序列化 1. 首 ...

  7. 对象的序列化与反序列化---IO学习笔记(四)

    对象的序列化,反序列化 对象的序列化: 就是将Object转换成byte序列 对象的反序列化: 将byte序列转换成Object 序列化流.反序列化流 序列化流(ObjectOutputStream) ...

  8. 第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 ...

  9. (记录)Jedis存放对象和读取对象--Java序列化与反序列化

    一.理论分析 在学习Redis中的Jedis这一部分的时候,要使用到Protostuff(Protobuf的Java客户端)这一序列化工具.一开始看到序列化这些字眼的时候,感觉到一头雾水.于是,参考了 ...

随机推荐

  1. 【BZOJ1208】[HNOI2004]宠物收养所 Splay

    还是模板题,两颗splay,找点删即可. #include <iostream> #include <cstdio> #include <cstdlib> #def ...

  2. JDBC学习笔记1

    JDBC(java database connectivity)一.基于socket+数据库底层协议java sun ------标准(接口)java.sql.*;jdbc sun公司为了方便连接数据 ...

  3. 李洪强iOS经典面试题上

    李洪强iOS经典面试题上     1. 风格纠错题 修改完的代码: 修改方法有很多种,现给出一种做示例: // .h文件 // http://weibo.com/luohanchenyilong/ / ...

  4. Centos Odoo Service Config

    #!/bin/sh ### BEGIN INIT INFO # Provides: openerp-server # Required-Start: $remote_fs $syslog # Requ ...

  5. vsphere平台为win系统动态扩展磁盘

    1.关闭win虚拟机 2.在vcenter管理中加大磁盘空间 3.开启win虚拟机(此时磁盘并没有加大) 4.打开cmd命令行: 进入分区管理--->查看磁盘--->选择磁盘---> ...

  6. Eclipse tomcat先启动成功,然后再报超时原因之一

    eclipse ,tomcat及环境设置都没错,通过上网搜资料发现是因为本机浏览器设置了代理,导致elipse启动tomcat时也启用代理,最后在eclipse中取消代理,成功启动,如下设置: Pre ...

  7. linux笔记七---------管道

    smarty的变量调节器就是linux的管道 管道:前者的输出是后者的输入 {$name|upper}   通过调节器使得名字变为大写输出 {$name|lower} linux的管道: ls –al ...

  8. 非静态的字段、方法或属性“System.Web.UI.Page.ClientScript...”要求对象引用 (封装注册脚本)

    在写项目时想对asp.net的注册前台脚本事件进行封装,就添加了一个BasePage.cs页面,但一直报错‘非静态的字段.方法或属性“System.Web.UI.Page.ClientScript.. ...

  9. Android课程---final关键字

    final      在Java中声明属性.方法和类时,可使用关键字final来修饰.      final变量即为常量,只能赋值一次:      final方法不能被子类重写:      final ...

  10. php session_start() 非常慢 问题原因查找

    最近在做东西的时候发现一个问题 有一个接口挂了 ,然后进行测试访问地址的时候,浏览器就一直处于等待响应的状态 怎么访问都不行,只有重启web服务器才行. 如果不重启web服务器进行代码调试,总发现在s ...