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"

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

  • 相关阅读:
    Effective C++ -----条款29:为“异常安全”而努力是值得的
    Effective C++ -----条款28:避免返回handles指向对象内部成分
    Effective C++ -----条款27:尽量少做转型动作
    Effective C++ -----条款26:尽可能延后变量定义式的出现时间
    Effective C++ -----条款25:考虑写出一个不抛异常的swap函数
    Effective C++ -----条款24:若所有参数皆需类型转换,请为此采用non-member函数
    HGE 第一个程序
    Help him http://acm.hdu.edu.cn/showproblem.php?pid=5059
    C 语言实例
    C 语言实例
  • 原文地址:https://www.cnblogs.com/wuyifu/p/3299788.html
Copyright © 2011-2022 走看看