Лично мне нравится избегать написания пользовательских 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
, чтобы добавить эти атрибуты, в противном случае вам придется идти по пути пользовательских преобразователей.
Мы должны связываться с фактическими источниками информации, а не просто главным хитом 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
К ответу 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