1 using System;
2 using System.Linq;
3 using Newtonsoft.Json;
4 using Newtonsoft.Json.Serialization;
5 using System.Collections.Generic;
6
7 namespace TT.Utilities.Json
8 {
9 public static class JsonHelper
10 {
11 /// <summary>
12 /// 只序列号需要的字段
13 /// </summary>
14 /// <param name="obj"></param>
15 /// <param name="arrFiled"></param>
16 /// <returns></returns>
17 public static string GetPartModelJson(object obj, string[] arrFiled)
18 {
19 JsonSerializerSettings jsetting = new JsonSerializerSettings();
20 jsetting.ContractResolver = new LimitPropsContractResolver(arrFiled);
21 return JsonConvert.SerializeObject(obj, Formatting.Indented, jsetting);
22 }
23
24 /// <summary>
25 /// 转换成json格式
26 /// </summary>
27 /// <param name="obj">对象</param>
28 /// <returns></returns>
29 public static string GetJson(object obj)
30 {
31 return JsonConvert.SerializeObject(obj);
32 }
33
34 /// <summary>
35 /// json格式字符串转化成T类型对象
36 /// </summary>
37 /// <typeparam name="T">类型</typeparam>
38 /// <param name="json">json字符串</param>
39 /// <returns></returns>
40 public static T GetModel<T>(string json)
41 {
42 return JsonConvert.DeserializeObject<T>(json);
43 }
44
45 /// <summary>
46 /// 反序列化成json属性
47 /// </summary>
48 /// <param name="json">json字符串</param>
49 /// <returns></returns>
50 public static Newtonsoft.Json.Linq.JProperty DeserialJson(string json)
51 {
52 return JsonConvert.DeserializeObject<Newtonsoft.Json.Linq.JProperty>(json);
53 }
54
55 /// <summary>
56 /// 反序列化JSON到给定的匿名对象.
57 /// </summary>
58 /// <typeparam name="T">匿名对象类型</typeparam>
59 /// <param name="json">json字符串</param>
60 /// <param name="anonymousTypeObject">匿名对象</param>
61 /// 调用:var objClass = JsonClass.DeserializeAnonymousType(obj.Data.ToString(), nClass[匿名对象]);
62 /// <returns>匿名对象</returns>
63 public static T DeserializeAnonymousType<T>(string json, T anonymousTypeObject)
64 {
65 T t = JsonConvert.DeserializeAnonymousType(json, anonymousTypeObject);
66 return t;
67 }
68
69 public class LimitPropsContractResolver : DefaultContractResolver
70 {
71 string[] props = null;
72
73 bool retain;
74
75 /// <summary>
76 /// 构造函数
77 /// </summary>
78 /// <param name="props">传入的属性数组</param>
79 /// <param name="retain">true:表示props是需要保留的字段 false:表示props是要排除的字段</param>
80 public LimitPropsContractResolver(string[] props, bool retain = true)
81 {
82 //指定要序列化属性的清单
83 this.props = props;
84
85 this.retain = retain;
86 }
87
88 protected override IList<JsonProperty> CreateProperties(Type type,
89
90 MemberSerialization memberSerialization)
91 {
92 IList<JsonProperty> list =
93 base.CreateProperties(type, memberSerialization);
94 //只保留清单有列出的属性
95 return list.Where(p =>
96 {
97 if (retain)
98 {
99 return props.Contains(p.PropertyName);
100 }
101 else
102 {
103 return !props.Contains(p.PropertyName);
104 }
105 }).ToList();
106 }
107 }
108 }
109 }