.net中怎樣實現json轉化時僅僅處理部分屬性二?
阿新 • • 發佈:2017-07-28
add solver too 不能 track for dynamic returns sof
在第一篇文章中使用的json方法。能夠依照須要僅僅處理須要的屬性,但卻要求屬性不能是復雜的類型,比如泛型,數組。其它用戶自己定義的類等,限制太多,於是自己看看能不能改進,想不到Newtonsoft.Json提供有相關的接口,僅僅須要實現就能夠了。
僅僅須要繼承DefaultContractResolver,並改寫一個方法就能夠了。
核心代碼:
/// <summary> /// 對象轉為json,全部屬性都輸出 /// </summary> /// <typeparam name="ObjType"></typeparam> /// <param name="obj"></param> /// <returns></returns> public static string ObjToJsonString<ObjType>(ObjType obj) where ObjType : class { string s = JsonConvert.SerializeObject(obj); return s; } /// <summary> /// 對象轉為json,僅僅輸出部分屬性 /// </summary> /// <typeparam name="T">對象類型</typeparam> /// <param name="t">對象類型值</param> /// <param name="propertyInfos">須要json處理的屬性名稱。以逗號分隔</param> /// <returns></returns> public static string ObjToJsonString<T>(T t, string propertyInfos) where T : class { string[] cols = propertyInfos.Split(new char[] { ‘,‘ }, StringSplitOptions.RemoveEmptyEntries); List<string> _propertyNames = new List<string>(); foreach (string col in cols) { string colTemp = col.ToLower().Trim(); if (!_propertyNames.Contains(colTemp)) { _propertyNames.Add(colTemp); } } string s = JsonConvert.SerializeObject(t, Formatting.Indented, new JsonSerializerSettings { ContractResolver = new DynamicContractResolver(_propertyNames) }); return s; } /// <summary> /// json轉為對象 /// </summary> /// <typeparam name="ObjType"></typeparam> /// <param name="JsonString"></param> /// <returns></returns> public static ObjType JsonStringToObj<ObjType>(string JsonString) where ObjType : class { ObjType s = JsonConvert.DeserializeObject<ObjType>(JsonString); return s; } class DynamicContractResolver : DefaultContractResolver { private readonly List<string> _propertyNames; public DynamicContractResolver(List<string> propertyNames) { _propertyNames = propertyNames; } /// <summary> /// 假設屬性是對象。須要把這個對象的屬性也傳給propertyNames, /// 否則處理這個對象屬性時,就不包括相應的屬性值 /// </summary> /// <param name="type"></param> /// <param name="memberSerialization"></param> /// <returns></returns> protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization) { IList<JsonProperty> properties = base.CreateProperties(type, memberSerialization); IList<JsonProperty> propertiesReturn = new List<JsonProperty>();//須要json處理的屬性 foreach (JsonProperty item in properties) { string PropertyNameTemp = item.PropertyName.ToLower().Trim(); if (_propertyNames.Contains(PropertyNameTemp)) { propertiesReturn.Add(item); } } return propertiesReturn; } }
.net中怎樣實現json轉化時僅僅處理部分屬性二?