using System; using System.Text; using System.Linq; using System.Collections.Generic; using Newtonsoft.Json; using Newtonsoft.Json.Serialization; namespace Jd.ACES.Utils { public class JsonHelper { public static T FromJson(string input) { return JsonConvert.DeserializeObject(input); } public static T FromJson(byte[] input) { return FromJson(Encoding.Default.GetString(input)); } public static string ToJson(T obj) { return JsonConvert.SerializeObject(obj); } public static string ToDesensitiveJson(T obj, string[] fields, bool retain = false) { var serializerSettings = new JsonSerializerSettings() { ReferenceLoopHandling = ReferenceLoopHandling.Ignore, ContractResolver = new DynamicContractResolver(fields, retain) }; return JsonConvert.SerializeObject(obj, serializerSettings); } } public class DynamicContractResolver : DefaultContractResolver { string[] props = null; bool retain; public DynamicContractResolver(string[] props, bool retain = true) { this.props = props; this.retain = retain; } protected override IList CreateProperties(Type type, MemberSerialization memberSerialization) { IList list = base.CreateProperties(type, memberSerialization); return list.Where(p => { if (retain) { return props.Contains(p.PropertyName); } else { return !props.Contains(p.PropertyName); } }).ToList(); } } }