各位请教个问题,使用.NET的DataContractJsonSerializer转换JSON格式数据,其中DateTime类型的转换后内容格式为 Date(1261443890904+0800),请教怎么能转换为“YYYY-MM-DD”的格式?有达人说需要转换完对字符串中日期格式重新处理,有没有其他的办法呢??

解决方案 »

  1.   

    现在框架里生成json用的jackson。优点多多,自不待言。
    今天解析data类型的数据时生成的是毫秒时间戳,就是一大串数字的那个东西,这个串(1369208023078)谁也看不明白,当然是不能显示到页面上的。
    如果想按照要求格式化这个时间戳,网上查了一下有两种办法。这里简单说说一种用注解办法解决的。
     
    第一,写一个序列化Date类型的类,该类继承自com.fasterxml.jackson.databind.JsonSerializer。
    1
    2
    3
    4
    5
    6
    7
    8
    9 public class CustomDateSerializer extends JsonSerializer<Date> { 
     
        @Override 
        public void serialize(Date value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException { 
                SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); 
                String formattedDate = formatter.format(value); 
                jgen.writeString(formattedDate); 
        } 
    }   
    第二,在data类型的属性geter方法上打注解,告诉jackson,这个属性生成json时用CustomDateSerializer 来处理。
    1
    2
    3
    4
    5
    6 private Date yxq; 
     
    @JsonSerialize(using = CustomDateSerializer.class)
    public Date getYxq() {
        return yxq;
    }  
    第三,生成json
    1
    2
    3 YpdmSimple obj = new YpdmSimple ();
    String json = JsonUtil.toJson(obj );
    System.out.println(json);  
    结果:注意有效期
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16 {
      "pym" : "gpgdd",
      "ypbm" : "00001100",
      "tym" : "骨盆固定带",
      "cd" : "山东潍坊",
      "ypgg" : "1*",
      "yklsj" : 2.0000,
      "pc" : "0000000001",
      "ph" : "23",
      "yxq" : "2012-05-20",
      "kcl" : 23.0000,
      "jhj" : 23.0000,
      "cfbl" : 2,
      "ykpfj" : null,
      "ykdw" : null

      

  2.   

    这是java用注解形式解决的方法。希望对你有启发
      

  3.   

    DataContractJsonSerializer在反序列化的时候自动处理,即使手动处理也很简单,那个数字的含义是与1970年1月1日的毫秒数之差。
    楼上不懂C#就别乱入了。
      

  4.   

    我觉得你可以添加一个属性自己ToString()
    如果这种情况多的话,应该自定义一个time类
      

  5.   

    你是要用什么程序处理,C#、Java、JavaScript、C++、C、ISO???
    C#直接用DataContractJsonSerializer处理就可以了。