使用.NET的DataContractJsonSerializer转换JSON格式数据,其中DateTime类型的转换后内容格式为 Date(1261443890904+0800),请教怎么能转换为“YYYY-MM-DD”的格式?
有达人说需要转换完对字符串中日期格式重新处理,有没有其他的办法呢?
现在框架里生成json用的jackson。优点多多,自不待言。
今天解析data类型的数据时生成的是毫秒时间戳,就是一大串数字的那个东西,这个串(1369208023078)谁也看不明白,当然是不能显示到页面上的。
如果想按照要求格式化这个时间戳,网上查了一下有两种办法。这里简单说说一种用注解办法解决的。
第一,写一个序列化Date类型的类,该类继承自com.fasterxml.jackson.databind.JsonSerializer。
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 来处理。
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);
结果:注意有效期
"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
}
C#直接用DataContractJsonSerializer处理就可以了。
DataContractJsonSerializerSettings st = new DataContractJsonSerializerSettings();
if (!string.IsNullOrEmpty(dateFormat)) st.DateTimeFormat = new System.Runtime.Serialization.DateTimeFormat(dateFormat);
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T), st);
MemoryStream ms = new MemoryStream();
ser.WriteObject(ms, t);
string jsonString = Encoding.UTF8.GetString(ms.ToArray());
ms.Close();
return jsonString;