JSON с классами?

Каждый язык программирования имеет свой собственный ряд правил и соглашения для видов имен, которые Вам разрешают использовать, и язык программирования Java не отличается. Правила и соглашения для именования Ваших переменных могут быть получены в итоге следующим образом:

  • Имена переменной чувствительны к регистру. Имя переменной может быть любым легальным идентификатором — последовательность неограниченной длины букв Unicode и цифр, начавшись с буквы, знак доллара "$" или символ подчеркивания "_". Соглашение, однако, состоит в том, чтобы всегда начинать Ваши имена переменной с буквы, не "$" или "_". Кроме того, символ знака доллара, условно, никогда не используется вообще. Можно найти некоторые ситуации, где автоматически сгенерированные имена будут содержать знак доллара, но имена переменной должны всегда избегать использования его. Подобное соглашение существует для символа подчеркивания; в то время как технически законно начать имя Вашей переменной с "_", этой практике препятствуют. Пробел не разрешен.

  • Последующие символы могут быть буквами, цифрами, знаками доллара или символами подчеркивания. Соглашения (и здравый смысл) относятся к этому правилу также. При выборе названия переменных используйте полные слова вместо загадочных сокращений. Выполнение так сделает Ваш код легче читать и понять. Во многих случаях это также сделает Ваше самодокументирование кода; поля назвали тактовый сигнал, скорость, и механизм, например, намного более интуитивен, чем сокращенные версии, таков как s, c, и g. Также имейте в виду, что имя, которое Вы выбираете, не должно быть ключевым словом или зарезервированным словом.

  • , Если имя Вы выбираете, состоит только из одного слова, произнесите то слово по буквам во всех строчных буквах. Если это состоит больше чем из одного слова, используйте для своей выгоды первую букву каждого последующего слова. Передаточное отношение имен и currentGear являются главными примерами этого соглашения. Если Ваша переменная хранит постоянную величину, такой как static final int NUM_GEARS = 6, соглашение изменяется немного, используя для своей выгоды каждую букву и разделяя последующие слова с символом подчеркивания. Условно, символ подчеркивания никогда не используется в другом месте.

От официальное Учебное руководство .

по Java

5
задан Marius 13 November 2009 в 04:02
поделиться

3 ответа

Вам нужно будет создать свой собственный сериализатор, который обнаруживает Вопрос (и другие классы) и сериализует их как вызовы конструктора вместо объектной нотации JSON. Обратите внимание, что вам понадобится способ сопоставить объект с вызовом конструктора. (Какие свойства берутся из каких параметров?)

Все остальные: Под классами он подразумевает функции, используемые как конструкторы; Я предполагаю, что он пытается сохранить прототип.

6
ответ дан 14 December 2019 в 08:53
поделиться

Вы смотрели JSON.NET ? Он может сериализовать / десериализовать объекты .NET в JS и наоборот. Это зрелый проект, и я настоятельно рекомендую его.

Кроме того, если вы можете изменить определение своей функции «Вопрос», чтобы принимать один объект со свойствами вместо использования отдельных аргументов, вы можете сделать что-то вроде этого:

Рабочая демонстрация

 function Question(args)
 {
  this.id = args.id;
  this.text = args.text;
 }

 Question.prototype.alertText = function() { alert(this.text); };

 $(document).ready(
  function()
  {
   var objectList = 
     {
      'list' : [ 
       { 'id' : 1, 'text' : 'text one' }
       ,{ 'id' : 2, 'text' : 'text two' }
       ,{ 'id' : 3, 'text' : 'text three'}
       ],
      'type' : 'Question'
     };


   var functionName = objectList['type'];
   var constructor = window[functionName];
   if(typeof constructor !== 'function')
   {
    alert('Could not find a function named ' + functionName);
    return;
   }

   var list = objectList['list'];
   $.each(list,
    function()
    {
     var question = new constructor(this);
     question.alertText();
    }
   );
  }
 );

В качестве примечания, пожалуйста, поставьте перед вашими интерфейсами .NET префикс «I», например, это должен быть IJsonType, а не JsonType.

typeof - это ключевое слово, поэтому укажите имя свойства в кавычках, если хотите его использовать.

1
ответ дан 14 December 2019 в 08:53
поделиться

Это очень опасно, но eval может обработать любой текст и выполнить его. http://www.w3schools.com/jsref/jsref_eval.asp

Но НЕ используйте его. Может сделать что-то вроде передачи параметров, которые вы хотите передать в конструктор как объект JSON, и вызвать с ним конструктор ...

function Question({"id" : "val", "title", "mytitle", "description" : "my desc"}){
...
}
0
ответ дан 14 December 2019 в 08:53
поделиться
Другие вопросы по тегам:

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