DataContractJsonSerializer类
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;
}
}

DataContractJsonSerializer类的更多相关文章
- 使用DataContractJsonSerializer类将类型实例序列化为JSON字符串和反序列化为实例对象 分类: JSON 前端 2014-11-10 10:20 97人阅读 评论(1) 收藏
一.JSON简介 JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式. JSON是"名值对"的集合.结构由大 ...
- WP8解析JSON格式(使用DataContractJsonSerializer类)(推荐)
DataContractJsonSerializer是.NET自带的类,在解析JSON格式的时候使用起来方便快捷,至于生成方面由于暂时没用到就没去看了.使用需要引用System.Runtime.Ser ...
- Silverlight 使用DataContractJsonSerializer序列化与反序列化 Json
环境说明:Silverlight 5.1,.Net Framework 4.0 1.添加引用System.ServiceModel.Web.dll. 因为 System.Runtime.Seria ...
- Json(2)-DataContractJsonSerializer
public static void DataContractSerializeDemo() { User user = new User { UserID = 1 ...
- JSON反序列化实体类
1.定义实体类 [DataContract] public class CustomerWordOrderViewModel { [DataMember] public string Name; [D ...
- Java类的继承与多态特性-入门笔记
相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特 ...
- DotNet的JSON序列化与反序列化
JSON(JavaScript Object Notation)JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式.在现在的通信中,较多的采用JSON数据格式,JSON有 ...
- 在C#中,Json的序列化和反序列化的几种方式总结
在这篇文章中,我们将会学到如何使用C#,来序列化对象成为Json格式的数据,以及如何反序列化Json数据到对象. 什么是JSON? JSON (JavaScript Object Notation) ...
- C#中JSON序列化和反序列化
有一段时间没有到博客园写技术博客了,不过每天逛逛博客园中大牛的博客还是有的,学无止境…… 最近在写些调用他人接口的程序,用到了大量的JSON.XML序列化和反序列化,今天就来总结下json的序列化和反 ...
随机推荐
- 配置php的CAS客户端
1.下载安装xmapp 2.开启Apache服务. 3.下载php的CAS客户端源码包(我使用的是CAS-1.2.0.tgz),解压到xmap的htdocs目录下(D:\xmapp\htdocs),进 ...
- HTML5之地理信息应用 获取自己的位置
上代码: window.onload = function() { if (navigator.geolocation) { navigator.geolocation.getCurrentPosit ...
- Yii 验证码验证
控制器如下
- .NET高端职位招聘要求
系统架构师: 1.硕士及以上学历,博士有项目成果者优先: 2.五年以上工作经验,三年以上互联网经验,一年以上大型软件项目总体设计.分析.架构经验,有移动互联网或云计算虚拟化系统设计开发经验者优先: 3 ...
- about Q&A in installing linux[centos6,7]
keywords:grub1,grub2,gnome,kde, question describe:install centos7 by U disk,出现问题, 解决办法: install cent ...
- opengl多重采样
效果图如下,两幅图效果是一样的,只是换了个背景.两幅图均是左侧使用了多重采样,右侧的没有使用多重采样.
- 制作UI纹理(UI Texture)
什么情况下使用UI Texture UI Texture的功能是在屏幕上显示一张图片,在这一点上它和Sprite有着相似的功能,但是UI Texture会消耗单独的DrawCall去渲染,并会单独加载 ...
- Python 知识点
1. generator #g is a generator and g is iterable g = (x*x for x in range(5)) for n in g: print(n) # ...
- ECshop Strict Standards: Only variables should be passed by reference in解决办法
本文章来给各位同学介绍关于ECshop Strict Standards: Only variables should be passed by reference in解决办法,希望此教程 对各位同 ...
- 中国海洋大学第四届朗讯杯高级组 I Cuckoo for Hashing
http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2719&cid=1203 题意 :意思就是哈希来的,具体大意就是说有两个哈希表,然后有这样 ...