【问题标题】:Serialize an IEnumerable<DayOfWeek> to a javascript client in which format将 IEnumerable<DayOfWeek> 序列化为 javascript 客户端,格式为
【发布时间】:2014-01-01 14:03:24
【问题描述】:

我将 IEnumerable 发送到 javascript 客户端。我想知道将这些值发送给客户端的最佳格式是什么,这些值的消耗和计算最适合 angularJS 本身或 angularjs/moment.js 库?

以整数 0、1、2、3、4、5、6 或星期日/星期一/星期二等形式发送值...

【问题讨论】:

    标签: javascript json angularjs momentjs


    【解决方案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 
    

    所以最好有一个整数,也可以降低网络流量。

    【讨论】:

    • 很高兴看到 sn-ps,因为我真的认为 Javascripts sunday 不像 c# 中的索引 0。
    【解决方案2】:

    “最佳”是主观的,但我会给你我的意见。

    从原始 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 function

      moment().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 协议缓冲区这样的二进制序列化格式。但这通常是矫枉过正——除非你的应用程序的其他部分需要,否则我不会走这条路。

    • 工作日名称为英文。就个人而言,我认为 JSON 本身并没有那么糟糕,但有些人可能更喜欢本地化。不过,您总是可以稍后再做:

      moment().day("Sunday").lang('fr').format("dddd");  // "dimanche"
      

    您还提到了 Angular.js,它确实有一个 date filter,但无论哪种方式,您都不能只绑定一周中的一天。所以这并不是决定的真正因素。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-05
      • 2011-01-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多