我将IEnumerable发送到javascript客户端。我想知道将这些值发送给客户端的最佳格式是什么,使用angularJS本身或angularjs / moment.js库,使用这些值的消耗和计算效果最好?
将值作为整数0,1,2,3,4,5,6或周日/周一/周二等发送......
答案 0 :(得分:1)
我认为 dayOfTheWeek 值可以作为整数发送。因为,它只在JS中以相同的方式处理,即整数..
<强> JS 强>
var d = new Date();
console.log("date is ->",d," and day of the week is->", d.getDay());
console.log("Now changing date");
d.setDate(4);
console.log("date is ->",d," and day of the week is->", d.getDay());
输出
date is -> Wed Jan 01 2014 19:46:07 GMT+0530 (India Standard Time) and day of the week is-> 3 VM331:3
Now changing date VM331:4
date is -> Sat Jan 04 2014 19:46:07 GMT+0530 (India Standard Time) and day of the week is-> 6
因此,为了降低网络流量,最好有一个整数。
答案 1 :(得分:1)
“最好”是主观的,但我会给你我的意见。
从原始JavaScript的角度来看,星期几是0(星期日)到6(星期六)。你可以看到in the MDN docs。它与C#的DayOfWeek
枚举完全一致,所以你当然可以通过它,但我不推荐它,原因有几个。
一旦你拥有它,你会用JavaScript做什么? Date
对象有一个getDay()
,但它没有setDay()
,因此您无法将现有日期调整为一周中的特定日期,除非您打算这样做您自己的计算或使用像moment.js这样的库。
Moment.js有a day
function for that,所以你可以这样传递:
moment().day(0);
但你可以轻松地传递全天的名字:
moment().day("Sunday");
如果您需要周日代表7
,您可以使用another functionmoment().isoWeekday(7);
这提出了一个有趣的观点,即日期和时间的标准是ISO-8601,该标准使用weekdays numbered 1 through 7。如果您要以数字形式从您的应用程序发送数据,它是否应该符合标准?我是这么认为的,但话又说回来 - 谁能说这些数据的消费者会明白该标准正在使用中?只需一个简单的整数,就很难分辨。
然后考虑一下JSON序列化。 JSON格式设计得比XML更紧凑,但仍然是人类可读的。哪一项看起来更具可读性?
{ days: [0,1,2] }
或
{ days: ["Sunday", "Monday", "Tuesday"] }
不相信?通过完整的日期和时间怎么样?
{ date: 1388453025678 }
或
{ date: "2013-12-31T01:23:45.678Z" }
显然,第二种选择在两种情况下都更具人性化。
通常,将C#枚举序列化为字符串而不是整数是公认的做法,否则它们可能会失去其原始含义。在上面的示例中,如果我调用变量foo
而不是days
,该怎么办?使用数字形式,您不知道数据代表什么。
因此,我的建议是传递字符串版本。有很多优点,我只能想到两个缺点:
数字形式更紧凑 - 但这不是JSON的目标。如果您正在使用较小的数据,那么使用像Google的Protocol Buffers这样的二进制序列化格式可能会更好。但这通常是矫枉过正 - 除非你的申请的其他部分要求,否则我不会走这条路。
工作日的名字是英文的。就个人而言,我认为JSON本身并不是那么糟糕,但有些人可能更喜欢本地化。您可以随时执行此操作:
moment().day("Sunday").lang('fr').format("dddd"); // "dimanche"
你还提到了Angular.js,它确实有一个date filter,但你无论如何都无法在一周中绑定它。所以这并没有真正影响决策。