繁体   English   中英

如何将JavascriptSerializer序列化DateTime字符串转换为Javascript Date对象

[英]How to convert JavascriptSerializer serialized DateTime string to Javascript Date object

使用JavaScriptSerializer使用DateTime字段序列化对象后,我看到DateTime字段如下所示:

EffectiveFrom: "/Date(1355496152000)/"

如何将此字符串转换为Javascript Date对象?

更新 :这个答案在所有情况下可能都不合适。 请参阅JD的答案,以获得更好的优雅解决方案。

您可以在.Net方面“修复” JavaScriptSerializer的输出:

JavaScriptSerializer serializer = new JavaScriptSerializer();
var json = serializer.Serialize(this);
json = Regex.Replace(json,@"\""\\/Date\((-?\d+)\)\\/\""","new Date($1)");
return json;

这会改变

EffectiveFrom: "/Date(1355496152000)/"

EffectiveFrom: new Date(1355496152000)

这是Javascript直接消费的

编辑:更新以适应负面日期

编辑:这是VB人员的正则表达式行:

json = Regex.Replace(json, """\\/Date\((-?\d+)\)\\/""", "new Date($1)")

更新2016.11.20:在javascript / json中有更多日期时间处理在我身后,我建议将正则表达式更改为简单的

json = Regex.Replace(json,@"\""\\/Date\((-?\d+)\)\\/\""","$1");

结果值是有效的JSON,并且可以在javascript端转换为Date对象。

同样值得注意的是,moment.js( http://momentjs.com/docs/#/parsing/ )足够愉快地处理这种格式。

moment("/Date(1198908717056-0700)/");

有一个答案可以帮助你:

从JavaScript到C#解析日期和时间

如果要使用javascript将datetime字符串解析为datetime值,则必须使用“new Date”,如下所示:

var data = new Date("1355496152000");
var obj = { EffectiveFrom: "/Date(1355496152000)/" };

//parse the Date value and replace the property value with Date object:

var dateValue = parseInt(obj.EffectiveFrom.replace(/\/Date\((\d+)\)\//g, "$1"));
obj.EffectiveFrom = new Date(dateValue);

这有点像黑客,但上面的内容似乎不太适合我想要实现的内容,所以在对象定义中我正在序列化,我这样做了:

        /// <summary>Date of the record retention event or document date.
        /// </summary>
        public string DateOfRetentionEvent;
        [ScriptIgnore]
        public DateTime RetentionEventDate 
        {
            get
            {
                return _retentionEventDate;
            }
            set
            {
                _retentionEventDate = value;
                DateOfRetentionEvent = value.ToShortDateString();
            }
        }

关键是,至少在我的用例中(反序列化永远不会发生),JSON并不真正关心C#对日期值做了什么。 [ScriptIgnore]添加到DateTime值并为解析器提供替代视图以进行输出应该可以解决问题。 它在我的情况下:

{
    "DateToDispose": "1/1/2020",
    "DateOfRetentionEvent": "10/1/2014",
    "FullRetentionCode": "NR+5",
    "RetentionEvent": "NR",
    "RetentionPeriod": 5
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM