天天看點

Json.net說法——(一)修飾标簽,日期序列化

通過屬性标簽自定義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>

轉載請注明:部落格園

繼續閱讀