JSON使用JsonConstructorAttribute,JsonConverterAttribute,JsonObjectAttribute
来源:互联网 发布:vmware6.5.1安装ubuntu 编辑:程序博客网 时间:2024/05/03 12:28
一、JSON使用JsonConstructorAttribute 在反序列化时创建对象(针对构造函数)
1.创建一个User对象.并添加JsonConstructor.
using System;using System.Collections.Generic;using System.Linq;using System.Text;using GongHuiNewtonsoft.Json;namespace JSONDemo{ public class User { public string UserName { get; private set; } public bool Enabled { get; private set; } public User() { } [JsonConstructor] public User(string userName, bool enabled) { this.UserName = userName; this.Enabled = enabled; } }}
2.反序列化时创建User对象.
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data;using GongHuiNewtonsoft.Json;using GongHuiNewtonsoft.Json.Serialization;using GongHuiNewtonsoft.Json.Converters;namespace JSONDemo{ class Program { static void Main(string[] args) { string json = @"{ ""UserName"":""JSONDemo\\username"", ""Enabled"":true }"; User user = JsonConvert.DeserializeObject<User>(json); Console.WriteLine(user.UserName); Console.WriteLine(user.Enabled); } }}
3.运行的结果
二、JSON使用JsonConverterAttribute序列化对象中指定的成员(针对成员)
1.先创建一个UserConverter对象,继承JsonConverter,然后重写WriteJson与ReadJson方法,仅对User中成员UserName实现序列化
using System;using System.Collections.Generic;using System.Linq;using System.Text;using GongHuiNewtonsoft.Json;namespace JSONDemo{ public class UserConverter:JsonConverter { public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { User user = (User)value; writer.WriteValue(user.UserName); } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { User user = new User(); user.UserName = (string)reader.Value; return user; } public override bool CanConvert(Type objectType) { return objectType == typeof(User); } }}
2.创建一个User对象,并使用JsonConverter
using System;using System.Collections.Generic;using System.Linq;using System.Text;using GongHuiNewtonsoft.Json;namespace JSONDemo{ [JsonConverter(typeof(UserConverter))] public class User { public string UserName { get; set; } public bool Enabled { get; set; } }}
3.序列化User对象
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data;using GongHuiNewtonsoft.Json;using GongHuiNewtonsoft.Json.Serialization;using GongHuiNewtonsoft.Json.Converters;namespace JSONDemo{ class Program { static void Main(string[] args) { User user = new User { UserName = @"JSONDemo\username", Enabled=true }; string json = JsonConvert.SerializeObject(user, Formatting.Indented); Console.WriteLine(json); } }}
4.运行结果,注意:Enabled设置了值,但是没有序列化
三、JSON使用JsonConverterAttribute序列化与反序列化(针对成员<引用类型>)
1.先创建一个枚举
using System;namespace JSONDemo{ public enum UserStatus { NotConfirmed, Active, Deleted }}
2.再创建一个对象User,给其对象添加引用枚举的成员,并在其上指定JsonConverter类型,即UserStatus
using System;using System.Collections.Generic;using System.Linq;using System.Text;using GongHuiNewtonsoft.Json;using GongHuiNewtonsoft.Json.Converters;namespace JSONDemo{ public class User { public string UserName { get; set; } [JsonConverter(typeof(StringEnumConverter))] public UserStatus Status { get; set; } }}
3.序列化与反序列化
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data;using GongHuiNewtonsoft.Json;using GongHuiNewtonsoft.Json.Serialization;using GongHuiNewtonsoft.Json.Converters;namespace JSONDemo{ class Program { static void Main(string[] args) { User user = new User { UserName = @"JSONDemo\username", Status = UserStatus.Active }; string json = JsonConvert.SerializeObject(user, Formatting.Indented); Console.WriteLine(json); User user1 = JsonConvert.DeserializeObject<User>(json); Console.WriteLine(user1.UserName); Console.WriteLine(user1.Status); } }}
4.运行的结果
四、JSON使用JsonObjectAttribute仅序列化指定JsonPropertyAttribute的属性
1.先创建一个File对象,然后添加JsonObject并指示仅属性序列化.即属性标记为System.Runtime.Serialization.DataMemberAttribute或者JsonProperty.
using System;using System.Collections.Generic;using System.Linq;using System.Text;using GongHuiNewtonsoft.Json;namespace JSONDemo{ [JsonObject(MemberSerialization.OptIn)] public class File { public Guid Id { get; set; } [JsonProperty] public string Name { get; set; } [JsonProperty] public int Size { get; set; } }}
2.实例化File对象,然后序列化.
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data;using GongHuiNewtonsoft.Json;using GongHuiNewtonsoft.Json.Serialization;using GongHuiNewtonsoft.Json.Converters;namespace JSONDemo{ class Program { static void Main(string[] args) { File file = new File { Id = Guid.NewGuid(), Name = "JSONDemo.JsonObjectAttribute.OptIn", Size = 1024 }; string json = JsonConvert.SerializeObject(file, Formatting.Indented); Console.WriteLine(json); } }}
3.运行结果,注意:属性Id未被序列化.
五、JSON使用JsonObjectAttribute序列化类实现IEnumerable<T>作为JSON对象而不是JSON数组
1.创建一个Directory对象,继承IEnumerable<string>.添加一个构造函数,在其中实例化数组.然后实现GetEnumerator方法.
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Collections;using GongHuiNewtonsoft.Json;namespace JSONDemo{ [JsonObject] public class Directory:IEnumerable<string> { public string Name { get; set; } public IList<string> Files { get; set; } public Directory() { Files = new List<string>(); } public IEnumerator<string> GetEnumerator() { return Files.GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } }}
2.实例化Directory对象,然后给属性Files添加项,再序列化.注意:这里序列化是的IEnumerator<string>对象,而非数组.
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data;using GongHuiNewtonsoft.Json;using GongHuiNewtonsoft.Json.Serialization;using GongHuiNewtonsoft.Json.Converters;namespace JSONDemo{ class Program { static void Main(string[] args) { Directory dir = new Directory { Name = "GongHui's documents", Files = { "JSONDemo.JsonObjectAttribute", "JSONDemo.JsonObjectAttribute.IEnumerable<T>" } }; string json = JsonConvert.SerializeObject(dir, Formatting.Indented); Console.WriteLine(json); } }}
3.运行的结果
JSON源代码下载地址:http://download.csdn.net/detail/lovegonghui/9342751
1 0
- JSON使用JsonConstructorAttribute,JsonConverterAttribute,JsonObjectAttribute
- 【JSON】JSON 使用
- 使用JSON
- 使用json
- json使用
- Json使用
- json使用
- json使用
- JSON 使用
- json使用
- Json使用
- json 使用
- json使用
- json使用
- JSON使用
- json使用
- Json使用
- 使用JSON
- 控制器与dataSource
- Android 获取内存、内部存储、外部存储空间大小
- 蓝桥杯-- 历届试题 买不到的数目
- CKEditor 3.6 + CKFinder 2.0在Asp.Net中的配置与基本用法
- JS判断请求来自Android手机还是iPhone手机,根据不同的手机跳转到不同的链接。
- JSON使用JsonConstructorAttribute,JsonConverterAttribute,JsonObjectAttribute
- 嵌入式wpa_supplicant的移植
- eclipse插入mysql数据库乱码
- platform架构小结十问
- [C++]类模板在何时实例化?
- UI基础-集合视图
- ASP.NET乱码深度剖析
- QT 创建、读写INI文件
- 修改textview 的图片颜色