Почему есть JConstructor?
Json.NET определяет JConstructor
тип.
Это сбивает с толку, потому что (насколько мне известно) конструкторы не являются частью JSON. Я дважды проверил спецификацию JSON и просмотрел http://json.org/, но ничего не смог найти. Похоже, что в Интернете не так много документации по этому типу.
Поскольку Json.NET так широко используется (даже подписан Microsoft), я предполагаю, что должна быть некоторая разумная мотивация для включения этого представления в объектную модель. Проблема в том, что любая попытка с моей стороны определить, что мотивация есть не что иное, как спекуляция.
Я проверил тип и его сериализацию, и очевидное поведение - просто обернуть код JavaScript, такой как new constructorName(...)
Например:
new JConstructor("ctorExample",
new JValue("value"),
new JObject(
new JProperty("prop1", new JValue(1)),
new JProperty("prop2", new JValue(2)))
)
.ToString()
выходы
new ctorExample(
"value",
{
"prop1": 1,
"prop2": 2
}
)
Итак, что такое JConstructor
тип предназначен для представления и почему он существует?
1 ответ
Json.NET включает в себя множество функций, которые не являются частью спецификации JSON. В частности, он позволяет анализировать некоторые файлы JSON, которые "официально" недействительны. Это включает в себя свойства без кавычек, комментарии, конструкторы и т. Д. Он включает в себя сериализацию ссылок и многие другие функции. Некоторые функции, такие как комментарии или свойства без кавычек, могут позже стать частью стандарта.
JConstructor
позволяет создавать код для использования приложениями JavaScript. Данные, сериализованные таким образом, являются недопустимым JSON, но допустимым кодом JavaScript. Такие файлы JSON не могут быть проанализированы с помощью JSON.parse
метод, но eval
сможет справиться с ними. В некоторых случаях это может быть полезно, хотя, вероятно, это плохая практика, в основном полезная для обратной совместимости с существующими JS-скриптами, поэтому, вероятно, это причина того, что она не рекламируется.