项目引用

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. 【CodeVS】p1038 一元三次方程求解

    题目描述 Description 有形如:ax3+bx2+cx+d=0  这样的一个一元三次方程.给出该方程中各项的系数(a,b,c,d  均为实数),并约定该方程存在三个不同实根(根的范围在-100 ...

  2. JS设置CSS样式的几种方式【转】

    用JS来动态设置CSS样式,常见的有以下几种 1. 直接设置style的属性  某些情况用这个设置 !important值无效 如果属性有'-'号,就写成驼峰的形式(如textAlign)  如果想保 ...

  3. [LintCode] House Robber 打家劫舍

    You are a professional robber planning to rob houses along a street. Each house has a certain amount ...

  4. [CareerCup] 17.3 Factorial Trailing Zeros 求阶乘末尾零的个数

    LeetCode上的原题,讲解请参见我之前的博客Factorial Trailing Zeroes. 解法一: int trailing_zeros(int n) { ; while (n) { re ...

  5. Struts的文件下载功能实现代码

    Action: package com.tengfeiyang.action; import java.io.File; import java.io.FileInputStream; import ...

  6. IIS 注册4.0 Framework

    打开cmd ,运行如下命令  C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i      

  7. svn版本升级遇到的bug

    从svn1.0升级到svn10.x时发生的bug 1.可能是没有javahl这个架包或是与你升级后的svn版本不匹配,eclipse在线下载就好 2.项目因为之前连接是较低版本的svn,当svn升级后 ...

  8. Javascript的逻辑判断和循环的知识点

    //boolean Number //Number:0,1.2,0377八进制.0xff进制 Infinity无穷大(10/0),指数(科学计数法) //Infinity * 0==NaN //Inf ...

  9. mybatis动态SQL语句

    一 if标签 ? 1 2 3 4 5 6 <select id=" getStudentListLikeName " parameterType="StudentE ...

  10. Object对象类

    Object对象类是所有类的祖先,他是默认自动继承的 Java为什么要做一个对象类呢?对象类的目的就是归一了类型,他就是把所有的类所有的对象归纳成为 Object类型.因为对象他认为对象应该拥有一些什 ...