Json.net 忽略實體某些屬性的序列化
阿新 • • 發佈:2019-02-14
遇到了一個小問題
有一個使用者類,結構和資料庫一模一樣,裡面包含使用者密碼,要向前臺返回使用者資訊的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會序列化它們的值。