DataContractJsonSerializer类同样是提供JSON序列化的类。而且貌似有几个方法还和XML有点点关系。

  注意用此类要引用System.ServiceModel.Web.dll与System.Runtime.Serialization.dll

  1、属性

  DataContractSurrogate       获取给定 IDataContractSurrogate 实例的当前活动代理项类型。代理项可以扩展序列化或反序列化过程。 
  IgnoreExtensionDataObject     获取一个值,指定在反序列化时是否忽略未知数据以及在序列化时是否忽略 IExtensibleDataObject 接口。
  KnownTypes             获取一个类型集合,这些类型可呈现在使用此 DataContractJsonSerializer 实例序列化的对象图中。 
  MaxItemsInObjectGraph        获取序列化程序通过一次读取或写入调用在对象图中序列化或反序列化的最大项数。

  2、方法

  IsStartObject     已重载。 获取一个值,该值指定序列化程序是否可以读取对象。 
  ReadObject        已重载。 反序列化 JSON(JavaScript 对象表示法)数据,并返回反序列化的对象。 
  WriteEndObject     已重载。 将结束 XML 元素写入可映射到 JavaScript 对象表示法 (JSON) 的 XML 文档。 
  WriteObject       已重载。 将对象序列化为 JavaScript 对象表示法 (JSON) 文档。 
  WriteObjectContent   已重载。 将对象内容写入可映射到 JavaScript 对象表示法 (JSON) 的 XML,而不写入包装元素。 
  WriteStartObject    已重载。 写入开始 XML 元素,以便将对象序列化为可映射到 JavaScript 对象表示法 (JSON) 的 XML。

  例子:

  class Program
{
static void Main(string[] args)
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Person));
//最常用的两个方法
string str = "{\"Id\":1,\"Name\":\"刘备\",\"Age\":\"23\"}";
Person p;
using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(str))) //构造函数能够接受Stream参数,因此你可以用内存流,文件流等等创建
{
p = serializer.ReadObject(ms) as Person;
}
Console.WriteLine(p.Name); //输出刘备 Person p2 = new Person(2, "关羽", 23);
byte[] byteArr;
using (MemoryStream ms = new MemoryStream())
{
serializer.WriteObject(ms, p2); byteArr = ms.ToArray();
}
Console.WriteLine(Encoding.UTF8.GetString(byteArr)); //输出 {"Age":23,"Id":1,"Name":"关羽"} Console.WriteLine(serializer.MaxItemsInObjectGraph); //2147483647 获取序列化程序通过一次读取或写入调用在对象图中序列化或反序列化的最大项数。
Console.WriteLine(serializer.DataContractSurrogate); //输出 空白
Console.WriteLine(serializer.IgnoreExtensionDataObject); //False 反序列化时是否忽略未知数据以及在序列化时是否忽略 IExtensibleDataObject 接口。
Console.WriteLine(serializer.KnownTypes.Count); //输出 0 一个类型集合,这些类型可呈现在使用此 DataContractJsonSerializer 实例序列化的对象图中。 //IsStartObject 已重载。 获取一个值,该值指定序列化程序是否可以读取对象。
//WriteEndObject 已重载。 将结束 XML 元素写入可映射到 JavaScript 对象表示法 (JSON) 的 XML 文档。
//WriteObjectContent 已重载。 将对象内容写入可映射到 JavaScript 对象表示法 (JSON) 的 XML,而不写入包装元素。
//WriteStartObject 已重载。 写入开始 XML 元素,以便将对象序列化为可映射到 JavaScript 对象表示法 (JSON) 的 XML。 Console.ReadKey();
}
} [DataContract] //对于使用DataContractJsonSerializer类而言,该属性是必须的
public class Person
{
public Person(int id,string name,int age)
{
Id = id;
Age = age;
Name = name;
} [DataMember] //对于使用DataContractJsonSerializer类而言,该属性是必须的
public int Id
{
get;
set;
}
[DataMember]
public string Name
{
get;
set;
}
[DataMember]
public int Age
{
get;
set;
}
}
 
分类: 前端:Json

DataContractJsonSerializer类的更多相关文章

  1. 使用DataContractJsonSerializer类将类型实例序列化为JSON字符串和反序列化为实例对象 分类: JSON 前端 2014-11-10 10:20 97人阅读 评论(1) 收藏

    一.JSON简介 JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式. JSON是"名值对"的集合.结构由大 ...

  2. WP8解析JSON格式(使用DataContractJsonSerializer类)(推荐)

    DataContractJsonSerializer是.NET自带的类,在解析JSON格式的时候使用起来方便快捷,至于生成方面由于暂时没用到就没去看了.使用需要引用System.Runtime.Ser ...

  3. Silverlight 使用DataContractJsonSerializer序列化与反序列化 Json

    环境说明:Silverlight 5.1,.Net Framework  ​4.0 1.添加引用System.ServiceModel.Web.dll. 因为 System.Runtime.Seria ...

  4. Json(2)-DataContractJsonSerializer

    public static void DataContractSerializeDemo()        {            User user = new User { UserID = 1 ...

  5. JSON反序列化实体类

    1.定义实体类 [DataContract] public class CustomerWordOrderViewModel { [DataMember] public string Name; [D ...

  6. Java类的继承与多态特性-入门笔记

    相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特 ...

  7. DotNet的JSON序列化与反序列化

    JSON(JavaScript Object Notation)JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式.在现在的通信中,较多的采用JSON数据格式,JSON有 ...

  8. 在C#中,Json的序列化和反序列化的几种方式总结

    在这篇文章中,我们将会学到如何使用C#,来序列化对象成为Json格式的数据,以及如何反序列化Json数据到对象. 什么是JSON? JSON (JavaScript Object Notation) ...

  9. C#中JSON序列化和反序列化

    有一段时间没有到博客园写技术博客了,不过每天逛逛博客园中大牛的博客还是有的,学无止境…… 最近在写些调用他人接口的程序,用到了大量的JSON.XML序列化和反序列化,今天就来总结下json的序列化和反 ...

随机推荐

  1. sgu 110 Dungeon

    这道题是计算几何,这是写的第一道计算几何,主要是难在如何求入射光线的反射光线. 我们可以用入射光线 - 入射光线在法线(交点到圆心的向量)上的投影*2 来计算反射光线,自己画一个图,非常清晰明了. 具 ...

  2. SQLite学习第03天:环境搭建

    相比于其他数据库而言,SQLite的环境搭建十分简单,简单几步就可以完成: (1) 首先,从http://www.sqlite.org/download.html的网站上下载预编译的shell二进制文 ...

  3. jQuery实例-简单选项卡-【一些常见方法(2)-练习】

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. C#基础(五)——类中私有构造函数作用

    如果类成员有private修饰符,就不允许在类范围以外访问这个类成员.对类构造函数应用private修饰符时,则禁止外部类创建该类的实例.尽管看上去有些不好理解(既然不能实例化,那么这个类还有什么用处 ...

  5. Java中的Inner Class (一)

    Inner Class看起来是一个简单的Code-Hideing机制,但是Java的Inner Class和C++的有所不同 - Inner Class能够和外部类(Surrounding Class ...

  6. php新特性--持续更新

    命名空间 在其他语言中不算新鲜事,但php是5.3.0中引入,具体定义就不复述了,其主要作用是 封装和组织相关php类 .命名空间被引入之前php主要是通过Zend方式组织代码,这种方式带来的问题是类 ...

  7. 【BZOJ】1006: [HNOI2008]神奇的国度 弦图消除完美序列问题

    1006: [HNOI2008]神奇的国度 Description K国是一个热衷三角形的国度,连人的交往也只喜欢三角原则. 他们认为三角关系:即AB相互认识,BC相互认识,CA相互认识,是简洁高效的 ...

  8. js replace in multi-line string

    .replace(/{id}/g, '_' + counter);

  9. python 操作sqlite数据库

    '''SQLite数据库是一款非常小巧的嵌入式开源数据库软件,也就是说 没有独立的维护进程,所有的维护都来自于程序本身. 在python中,使用sqlite3创建数据库的连接,当我们指定的数据库文件不 ...

  10. Linux df 命令

    Linux df 命令 df(disk free)功能说明:显示磁盘的相关信息.语 法:df [-ahHiklmPT][--block-size=<区块大小>][-t <文件系统类型 ...