Зарезервированные слова в JavaScript

Лично мне нравится избегать написания пользовательских JsonConverter s, где это возможно, и вместо этого использовать различные атрибуты JSON, которые были предназначены для этой цели. Вы можете просто украсить FooCollection с помощью JsonObjectAttribute , который заставляет сериализацию как объект JSON, а не массив. Вам нужно будет украсить свойства Count и IsReadOnly с помощью JsonIgnore, чтобы они не отображались на выходе. Если вы хотите сохранить _foos частное поле, вам также нужно будет украсить его с помощью JsonProperty.

[JsonObject]
class FooCollection : IList {
    [JsonProperty]
    private List _foos = new List();
    public string Bar { get; set; }  

    // IList implementation
    [JsonIgnore]
    public int Count { ... }
    [JsonIgnore]
    public bool IsReadOnly { ... }
}

Сериализация дает что-то вроде следующего:

{
  "_foos": [
    "foo1",
    "foo2"
  ],
  "Bar": "bar"
}

Очевидно, что это работает только в том случае, если вы можете изменить определение FooCollection, чтобы добавить эти атрибуты, в противном случае вам придется идти по пути пользовательских преобразователей.

161
задан Rich Churcher 15 January 2018 в 00:16
поделиться

2 ответа

Мы должны связываться с фактическими источниками информации, а не просто главным хитом Google.

http://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Reserved_Words

JScript 8.0: http://msdn.microsoft.com/en-us/library/ttyab5c8.aspx

110
ответ дан 4 revs, 3 users 83% 23 November 2019 в 21:22
поделиться

К ответу benc's приложения , см. Стандартный ECMA-262. Это официальные зарезервированные слова, но только педант игнорирует реализацию для уважения стандарта. Для зарезервированных слов самых популярных реализаций, который является Firefox и Internet Explorer, см. ответ benc.

зарезервированные слова в EMCAScript-262 зарезервированное слово s, NullLiteral будущего Ключевого слова s, , и BooleanLiteral с, где эти Ключевые слова

break     do        instanceof  typeof
case      else      new         var
catch     finally   return      void
continue  for       switch      while
debugger  function  this        with
default   if        throw
delete    in        try

, будущее Зарезервированное слово †‹s

abstract  export      interface  static
boolean   extends     long       super
byte      final       native     synchronized
char      float       package    throws
class     goto        private    transient
const     implements  protected  volatile
double    import      public 
enum      int         short

, NullLiteral

null

и BooleanLiteral , с

true
false
61
ответ дан paulalexandru 23 November 2019 в 21:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: