我想将我的日期序列化为特定格式,但我无法一起行动。
我尝试构建一个漂亮的小类,但输出包含在引号中,这不起作用。
我希望JSON看起来像这样......
{
date : new Date(2013, 8, 30)
}
但是我明白了......
{
date: "new Date(2013, 8, 30)"
}
我的班级
public class DateCell : ChartCell
{
[JsonIgnore]
public DateTime Value { get; set; }
[JsonProperty(PropertyName = "date")]
public override object DataValue
{
get
{
return string.Format("new Date({0}, {1}, {2})", this.Value.Year, this.Value.Month - 1, this.Value.Day);
}
}
}
答案 0 :(得分:4)
JavaScript Object和JSON之间存在差异。您所描述的内容可能在JavaScript对象中有效,但它不是有效的JSON。 JSON不允许您要求的表示。
在JSON中,值只能是以下之一:
"abc"
123
或-12.34
true
,false
或null
[1,"a",true]
{ a: 1, b: "abc" }
它不仅可以是 JavaScript对象,还可以是任何其他任意JavaScript。请参阅json.org上的规范。
传递Date
对象构造函数没有任何意义,因为JSON是一种通用的序列化格式,而Date
是一个JavaScript本机类。您希望非JavaScript代码如何解释这个?
虽然JSON标准没有定义特定的日期或时间格式,但事实上的标准是ISO 8601格式。您的DateTime
看起来像"2013-09-30T00:00:00"
。还有其他方法可以序列化日期,但它们并不统一或流行。
在JSON.Net中,ISO 8601格式是默认格式。因此,除了仅使用其原始属性序列化对象之外,您不需要执行任何特殊操作。
public class DateCell : ChartCell
{
public DateTime Value { get; set; }
}
<强>更新强>
由于您在评论中说您将此内容传递给Google Charts,因此from their reference显示他们使用的非标准格式看起来像<{1}}构造函数,但是省略了Date
关键字。为什么他们这样做,我不确定,但您应该能够修改原始代码,如下所示:
new