Как к XML сериализируют 'тип'

Модифицированный (и немного уменьшенный) скрипт приведен ниже:

function onEdit(e) {
  var rg = e.range;
  if (rg.getSheet().getName() == "GMB Descriptions" && rg.columnStart == 4) { 
    var nextCell = rg.offset(0, 1);
    if (nextCell.getValue() == '') {
      var dt = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "MM/dd/yyyy - h:mm a - ");
      var userMail = e.user.getEmail();
      nextCell.setValue(dt + userMail);
    }
  }
}

Благодаря Куперу за подсказку Utilities он работает отлично. Мы используем e.user.getEmail(), предполагая, что проблем с безопасностью нет (по мнению автора). Во время тестирования у меня все работает как положено.

12
задан Robert 14 November 2008 в 17:54
поделиться

4 ответа

Сериализация XML сериализует только открытые поля и значения свойств объекта в поток XML. Сериализация XML не включает информацию о типе. Например, если у вас есть объект Book, который существует в пространстве имен библиотеки, нет гарантии, что он будет десериализован в объект того же типа.

Источник: MSDN: Введение в сериализацию XML

3
ответ дан 2 December 2019 в 05:16
поделиться

Вы могли потенциально реализовать IXmlSerializable интерфейс и использование Type.FullName (Вам, возможно, также понадобится Type.AssemblyQualifiedName) для сериализации и Assembly.GetType(string) для десериализации Вашего элемента типа.

3
ответ дан 2 December 2019 в 05:16
поделиться

Я закончил тем, что преобразовал Имя типа в строку для сохранения его к XML.

При десериализации я загружаю весь DLLs и сохраняю название типа и типа в словаре. Когда я загружаю XML Именем типа, я могу искать имя в ключе словаря и знать тип на основе значения словаря.

3
ответ дан 2 December 2019 в 05:16
поделиться

Проблема состоит в том что тип XmlData. T является на самом деле "Система. RuntimeType" (подкласс Типа), который, к сожалению, не общедоступен. Это означает, что нет никакого способа сказать сериализирование что типы ожидать. Я предлагаю только сериализировать название типа или полностью определенное имя, как Jay Bazuzi предлагает.

1
ответ дан 2 December 2019 в 05:16
поделиться
Другие вопросы по тегам:

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