序列化回調方法修飾标簽
json.net支援序列化回調方法标簽。一個回調修飾标簽可以在序列化和反序列化對象前後控制對象。
OnSerializing
OnSerialized
OnDeserializing
OnDeserialized
通知序列化器在對象的序列化生命周期内要調用哪些方法,并用适合的标簽來修飾方法(序列化時,序列化後,反序列化時,反序列化後)。
參考類:Customer
public class Customer
{
//在序列化前後沒有變動
public int Unid { get; set; }
//在序列化前後設定和重置
public string CustomerName { get; set; }
//設定為null,但在序列化後填充
public string Memo { get; set; }
//忽略序列化,OnDeserializedAttribute标簽用于序列化之後設定一個值
[JsonIgnore]
public string Other { get; set; }
public Customer()
Unid = 11;
CustomerName = "宋江";
Other = "忽略序列化";
Memo = null;
}
[OnSerializing]
internal void OnSerializingMethod(StreamingContext context)
CustomerName = "在序列化時被寫入資料檔案";
[OnSerialized]
internal void OnSerializedMethod(StreamingContext context)
CustomerName = "序列化之後被指派";
[OnDeserializing]
internal void OnDeserializingMethod(StreamingContext context)
Other = "反序列化時被指派";
[OnDeserialized]
internal void OnDeserializedMethod(StreamingContext context)
Memo = "反序列化之後,被指派";
這個.net類有4個屬性:
·Unid,在序列化前後值沒有變化,且值不為null
·CustomerName,在序列化前後指派和重設值
·Memo,給null值
·Other,這個屬性忽略序列化。
public void SerializeCallbacks()
Customer customer = new Customer();
Console.WriteLine(customer.Unid);
Console.WriteLine(customer.CustomerName);
Console.WriteLine(customer.Memo);
Console.WriteLine(customer.Other);
/*
11
宋江
忽略序列化
*/
string json = JsonConvert.SerializeObject(customer, Formatting.Indented);
Console.WriteLine(json);
{"Unid": 11,"CustomerName": "在序列化期間被寫入資料檔案", "Memo": null}
11
序列化之後被指派
分析:
(1)在沒有序列化時的值
輸出4個屬性的值,其中Memo值為null
(2)序列化之後
·Unid在序列化之前和之後沒有變化
·CustomerName,在序列化之前設定為“宋江”,但序列化之後變成了
“在序列化期間被寫入資料檔案”([OnSerializing])
·Memo為null值
·Other屬性被忽略
序列化之後,Customer對象的值:
·Unid沒有變化
·CustomerName,序列化之後,被重新設定值“序列化之後被指派”( [OnSerialized])
·Other,忽略序列化,值沒有變動
(2)反序列化
接上
之後:
customer = JsonConvert.DeserializeObject<Customer>(strJson);
在序列化時被寫入資料檔案
反序列化之後,被指派
反序列化時被指派 */
·CustomerName在序列化時,被指派“在序列化期間被寫入資料檔案”寫到資料檔案(生成了json),即json對象中的CustomerName值為“在序列化期間被寫入資料檔案”,在反序列化之後,得到了CustomerName屬性為這個值的對象
·Memo在反序列化之後被指派為“反序列化之後,被指派” [OnDeserialized]标簽
·Other屬性在序列化時是被忽略的,而即使這樣,因為[OnDeserializing]标簽的作用,使它在反序列化時被設定值“反序列化時被指派”
部落格園大道至簡
http://www.cnblogs.com/jams742003/轉載請注明:部落格園