json数据的序列化和反序列化
来源:互联网 发布:mac配置jenkins 编辑:程序博客网 时间:2024/05/18 01:58
如何:对 JSON 数据进行序列化和反序列化
发布日期: 2016年5月
JSON(JavaScript 对象符号)是一种高效的数据编码格式,可用于在客户端浏览器和支持 AJAX 的 Web 服务之间快速交换少量数据。
本主题演示如何将.NET 类型对象序列化为 JSON 编码数据,然后以 JSON 格式的数据反序列化回.NET 类型使用的实例DataContractJsonSerializer。 本示例使用数据协定来演示用户定义的 Person
类型的序列化和反序列化。
通常,当在通过支持 AJAX 的终结点公开的服务操作中使用数据协定类型时,Windows Communication Foundation (WCF) 会自动处理 JSON 序列化和反序列化。 但是,在某些情况下您可能需要直接处理 JSON 数据,这正是本主题演示的方案。
如果在服务器上序列化传出答复期间出现错误,或者答复操作由于某个其他原因引发异常,则可能不会将其作为错误返回到客户端。
本主题基于JSON 序列化示例。
定义 Person 的数据协定
定义的数据约定
Person
通过附加DataContractAttribute到类和DataMemberAttribute属性要序列化的成员。 有关以下内容的详细信息数据协定,请参见设计服务协定。[DataContract] internal class Person { [DataMember] internal string name; [DataMember] internal int age; }
将 Person 类型的实例序列化为 JSON
创建
Person
类型的实例。Person p = new Person(); p.name = "John"; p.age = 42;
序列化
Person
对象传递给内存流使用DataContractJsonSerializer。MemoryStream stream1 = new MemoryStream(); DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Person));
使用WriteObject方法将 JSON 数据写入到流。
ser.WriteObject(stream1, p);
显示 JSON 输出。
stream1.Position = 0; StreamReader sr = new StreamReader(stream1); Console.Write("JSON form of Person object: "); Console.WriteLine(sr.ReadToEnd());
从 JSON 反序列化 Person 类型的实例
将 JSON 编码数据反序列化为的新实例
Person
使用ReadObject方法DataContractJsonSerializer。stream1.Position = 0; Person p2 = (Person)ser.ReadObject(stream1);
显示结果。
Console.Write("Deserialized back, got name="); Console.Write(p2.name); Console.Write(", age="); Console.WriteLine(p2.age);
示例
// Create a User object and serialize it to a JSON stream. public static string WriteFromObject() { //Create User object. User user = new User("Bob", 42); //Create a stream to serialize the object to. MemoryStream ms = new MemoryStream(); // Serializer the User object to the stream. DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(User)); ser.WriteObject(ms, user); byte[] json = ms.ToArray(); ms.Close(); return Encoding.UTF8.GetString(json, 0, json.Length); } // Deserialize a JSON stream to a User object. public static User ReadToObject(string json) { User deserializedUser = new User(); MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json)); DataContractJsonSerializer ser = new DataContractJsonSerializer(deserializedUser.GetType()); deserializedUser = ser.ReadObject(ms) as User; ms.Close(); return deserializedUser; }
对于包含多个具有相同名称的成员的数据协定,JSON 序列化程序将引发一个序列化异常,如以下示例代码中所示。
[DataContract] public class TestDuplicateDataBase { [DataMember] public int field1 = 123; } [DataContract] public class TestDuplicateDataDerived : TestDuplicateDataBase { [DataMember] public new int field1 = 999; }
- json数据的序列化和反序列化
- Json序列化和反序列化
- json序列化和反序列化
- json序列化和反序列化
- json序列化和反序列化
- json序列化和反序列化
- Json序列化和反序列化
- json序列化和反序列化
- Newtonsoft.Json序列化和反序列
- Newtonsoft.Json序列化和反序列
- Newtonsoft.Json序列化和反序列
- Newtonsoft.Json序列化和反序列
- Newtonsoft.Json序列化和反序列
- Newtonsoft.Json序列化和反序列
- Newtonsoft.Json序列化和反序列
- Newtonsoft.Json序列化和反序列
- Newtonsoft.Json序列化和反序列
- Newtonsoft.Json序列化和反序列
- 学习笔记-图像识别(Photo OCR)
- 泛型总结
- 高效工作、学习方法初探
- SuperMap iDesktop中OracleSpatial数据源新建与打开失败小结
- 重写equals()和hashCode()方法,用于比较对象的内容
- json数据的序列化和反序列化
- Kvm 简介 安装 使用 桥接网络
- 快速删除大量小文件方法
- 计蒜客 17116 Sum(2017 ACM-ICPC 亚洲区(西安赛区)网络赛 C)
- Project Euler__problem 5
- hadoop简介和环境
- Sudo
- 非对称加密 秘钥登录
- Shiro入门学习一