zoukankan      html  css  js  c++  java
  • Json.net说法——(一)修饰标签,日期序列化

    摘自: http://www.cnblogs.com/jams742003/archive/2009/12/24/1631587.html

    通过属性标签自定义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; }

     

            [JsonProperty]

            [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"

    这个类有一个日期格式化属性,用于自定义其它的格式字符串。

  • 相关阅读:
    [kuangbin带你飞]专题十六 KMP & 扩展KMP & ManacherK
    [kuangbin带你飞]专题十六 KMP & 扩展KMP & Manacher J
    [kuangbin带你飞]专题十六 KMP & 扩展KMP & Manacher I
    pat 1065 A+B and C (64bit)(20 分)(大数, Java)
    pat 1069 The Black Hole of Numbers(20 分)
    pat 1077 Kuchiguse(20 分) (字典树)
    pat 1084 Broken Keyboard(20 分)
    pat 1092 To Buy or Not to Buy(20 分)
    pat 1046 Shortest Distance(20 分) (线段树)
    pat 1042 Shuffling Machine(20 分)
  • 原文地址:https://www.cnblogs.com/wuyifu/p/3299788.html
Copyright © 2011-2022 走看看