遇到了一個小問題
有一個用戶類,結構和數據庫一模一樣,里面包含用戶密碼,要向前台返回用戶信息的json數據,但是不能輸出密碼這個字段。
之前的做法是 重新又建了一個不包含這個字段的新類,然后深度復制,總感覺這中方式有點笨拙。受人啟發么,想起來json.net中有一個
能控制被序列化為一個json對象中的屬性的特性,就找找有沒有能屏蔽實體屬性的特性
果然
using Newtonsoft.Json; using Newtonsoft.Json.Converters; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1 { [JsonObject(MemberSerialization.OptIn)] public class User { [JsonProperty(PropertyName = "ID")] public int Unid { get; set; } [JsonProperty] public string UserName { get; set; } [JsonProperty] [JsonConverter(typeof(IsoDateTimeConverter))] public DateTime CreateTime { get; set; } [JsonIgnoreAttribute] public string PasssWord { get; set; } public string Memo { get; set; } } }
附帶解釋
JsonObjectAttribute
這個標簽的成員序列化標志指定成員序列化是opt-in(要序列化的成員必須帶有JsonProperty或DataMember標簽)還是opt-out(默認所有的都會序列化,但通過JsonIgnoreAttribute標簽可以忽略序列化。opt-out是json.net默認的)。
JsonPropertyAttribute
允許被序列化的成員自定義名字。這個標簽同時標示出:在成員序列化設置為opt-in的時候,成員會被序列化。
JsonIgnoreAttribute
忽略域或屬性的序列化
JsonConverterAttribute
用於指派轉換對象的JsonSerializer。
這個標簽可以修飾類或類成員。用於修飾類時,通過此標簽指派的JsonConverter會被設置為序列化類的默認方式。用於修飾屬性或域成員時,被指派的JsonConverter會序列化它們的值。