通過屬性标簽自定義JSON序列化
JsonObjectAttribute:類修飾标簽,用于控制類如何被序列化為一個json對象
JsonArrayAttribute:集合修飾标簽,用于控制集合如何被序列化為一個json對象
JsonPropertyAttribute:域和屬性修飾标簽,用于控制它們如何被序列化為一個json對象中的屬性
JsonConverterAttribute:類,域,屬性修飾标簽,用于指定序列化期間的轉換器
示例代碼:
[JsonObject(MemberSerialization.OptIn)]
public class Customer
{
[JsonProperty(PropertyName="ID")]
public int Unid { get; set; }
[JsonProperty]
public string CustomerName { get; set; }
[JsonConverter(typeof(IsoDateTimeConverter))]
public DateTime CreateTime { 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會序列化它們的值。
序列化日期
json中的日期是困難的。這個問題來源于json細則本身,因為在json中沒有日期的原義句法。這個細則包括對象,數組,字元串,整型和浮點,但它沒有對日期定義相關的标準。在json.net中用于日期的預設的格式與微軟:“\/Date(1198908717056)\/”這個一樣。
DateTime JsonConverters
因為在json中沒有關于日期的标準,在系統間的互操作過程中出現了大量不同的格式。幸運的是json.net提供了用于讀寫自定義日期格式的解決方案:JsonConverters。一個json轉換器用于指定一種類型如何被序列化。
public class LogEntry
{
public string Details { get; set; }
public DateTime LogDate { get; set; }
public void WriteJsonDates()
LogEntry entry = new LogEntry
LogDate = new DateTime(2009, 2, 15, 0, 0, 0, DateTimeKind.Utc),
Details = "Application started."
};
string defaultJson = JsonConvert.SerializeObject(entry);
// {"Details":"Application started.","LogDate":"\/Date(1234656000000)\/"}
string javascriptJson = JsonConvert.SerializeObject(entry, new JavaScriptDateTimeConverter());
// {"Details":"Application started.","LogDate":new Date(1234656000000)}
string isoJson = JsonConvert.SerializeObject(entry, new IsoDateTimeConverter());
// {"Details":"Application started.","LogDate":"2009-02-15T00:00:00Z"}
JavaScriptDateTimeConverter
這個來自json.net的轉換器是兩種日期轉換器之一。它是把日期序列化為一個js日期對象。
new Date(1234656000000)
IsoDateTimeConverter
這種轉換器把日期序列化為一個ISO8601格式的字元串。
"2009-02-15T00:00:00Z"
這個類有一個日期格式化屬性,用于自定義其它的格式字元串。
部落格園大道至簡
<a href="http://www.cnblogs.com/jams742003/" target="_blank">http://www.cnblogs.com/jams742003/</a>
轉載請注明:部落格園