Как создавать XML-комментарии с помощью C# и [Serialize]
Hi, I am serializing a class in C# following this example http://msdn.microsoft.com/en-us/library/2baksw0z(v=vs.110).aspx Here is my test class [Serializable] public class Test { [XmlElement("SomeXmlElementName")] public int Something { get; set; } } This works well and creates and when the class content is serialized it creates a file with a node named SomeXmlElementName with the right value. What I would also like is to include a comment in the XML file and I am looking for some .Net attribute I can use to decorate the method to include the comment. The code below does not compile, but it demonstrates the sort of thing I am after [Serializable] public class Test { [XmlElement("SomeXmlElementName"), XmlComment("Some comment to include in the XML file when created"] public int Something { get; set; } } Does something like this exist at all? Thank you
Sergey Alexandrovich Kryukov
Интересно, почему? Обычно сериализация XML не должна использовать никаких комментариев. Почему?
—СА
Jon Joeney
Ну, я сериализую XML для использования другим приложением, которое определяет структуру с помощью XML-схемы, которую я не могу изменить. Я хочу добавить сгенерированное время и другие вещи в XML в комментариях, и поэтому это все еще допустимая схема, но у меня есть дескриптор, когда файл был создан.
Sergey Alexandrovich Kryukov
Что за секунда!.. вы хотите сказать, что существует схема, которая определяет некоторые комментарии? Может быть, он даже должен был нести какую-то информацию в комментариях? "Расширение" схемы, которую вы не можете расширить?
Во всяком случае, я бы не стал делать таких вещей и посоветовал бы вам переосмыслить это. Слишком грязный подход, небезопасный и т. д...
—СА
rhyous
Xml может быть отображен на веб - страницах с помощью XSLT, очень похожего на HTML. Возможно, потребуется отобразить комментарии.
Кроме того, XML-файл может быть выведен вместе с Лицензионным соглашением в комментариях.
Sergey Alexandrovich Kryukov
Единственный правильный подход-игнорировать комментарии. Их следует использовать только по прямому назначению. Конечно, синтаксический анализатор XML может читать комментарии, но это не для чего-то вроде их отображения или интерпретации каким-либо образом. Почему бы не следовать дизайну XML?
—СА
rhyous
Я не согласен. Мы не говорим о чтении Xml и игнорировании комментариев. Мы говорим о написании и Xml и добавлении комментариев к написанному Xml.
C# - это не Xml. Сериализация-это возможность генерировать Xml-файл из объекта C#. Должен ли объект C# разрешать добавление комментариев? Думаю, так и должно быть. Комментарии в Xml являются частью спецификации для Xml.
http://www.w3.org/TR/REC-xml/#sec-comments
Сериализатор по умолчанию в C# не поддерживает добавление комментария к Xml-файлу, несмотря на то, что комментарии допустимы и поддерживаются в спецификации Xml.
Спецификация гласит: Они не являются частью символьных данных документа; XML-процессор может, но не обязательно, сделать возможным для приложения извлечение текста комментариев.
Вербализация очень ясна, что процессору не требуется поддерживать комментарии, но это может быть. В этом случае мы даже не говорим о чтении комментария, мы говорим о написании Xml с комментариями.
Я ничего не видел о генераторе Xml или сериализаторе, но можно предположить, что если бы комментарии не предназначались для написания, они не добавляли бы их в спецификацию. Независимо от того, передаем ли мы ремесло и xml или генерируем Xml, комментарии важны.
У меня были запросы на добавление комментариев в каждый Xml, который я когда-либо сериализовал. Либо от тестировщиков программного обеспечения, технической поддержки, либо по причинам включения Лицензионного соглашения.
Чтобы удовлетворить такие запросы, я должен свернуть свой собственный сериализатор.
Sergey Alexandrovich Kryukov
Ваша точка зрения принята. Если это двусторонний процесс, вы должны сохранить комментарии.
—СА
Andreas Gieriet
Чего вы пытаетесь достичь? Комментарии-это конструкция времени компиляции, сериализация-это концепция времени выполнения. Во время выполнения у вас нет комментариев к исходному коду.
Что вы можете сделать, так это добавить свойство с именем AdditionalRuntimeInfo
или аналогично и передать какую-то строку или другую согласованную конструкцию данных.
Овации
Энди
Jon Joeney
Код, который я хочу, я нашел здесь, он выглядит очень просто, и он работает
http://stackoverflow.com/questions/7385921/how-to-write-a-comment-to-an-xml-file-when-using-the-xmlserializer
Andreas Gieriet
Ну, это заманчиво, но пример-дерьмо: если имя свойства нуждается в таком комментарии, измените имя свойства соответственно, например сделайте его ApplicationVersion
вместо того чтобы только Version
и комментирование становится устаревшим. Если метки времени являются релевантной информацией для передачи из пункта А в пункт Б, добавьте их в схему.
Я знаю, реальность не всегда позволяет контролировать всю цепочку. Но если это находится под вашим контролем, я бы сказал, что подход к комментариям-это хак.
Овации
Энди
Jon Joeney
XML-схема определяется сторонней компанией. Я не могу пойти менять его волей неволей и все еще ожидать поддержки поставщика
Andreas Gieriet
Я все еще удивляюсь, почему вы хотите иметь эти комментарии в XML. Почему недостаточно иметь его только в качестве комментария кода в классе? Сериализованные данные вряд ли читаются людьми, не так ли? Кто должен прочитать этот комментарий в сериализованных данных? Ты нашел способ сделать это, отлично. Если это действительно полезно - другой вопрос. Вы сами для себя решили что это так ;-)
Овации
Энди
rhyous
Цитата: сериализованные данные вряд ли читаются людьми, верно?
Неправильный. Xml читается людьми. Отсюда и необходимость в комментариях.
В любом случае, ваши аргументы ошибочны.
Почти никогда != никогда.
По вашей логике, поскольку большая часть кода читается только одним человеком (так что вряд ли когда-либо), мы должны удалить функцию комментариев в коде. Комментарии все равно удаляются, когда он компилируется, верно?
Цитата: какова на самом деле цель этого? Кто должен прочитать этот комментарий в сериализованных данных?
Я уже ответил на ваш вопрос выше, когда сказал::
У меня были запросы на добавление комментариев в каждый Xml, который я когда-либо сериализовал. Либо от тестировщиков программного обеспечения, технической поддержки, либо по причинам включения Лицензионного соглашения.
Понимаете ли вы, для чего используется Xml? Это не просто код для кода.
Как часто вы открывали xml-файл (web.config, app.config) в Visual Studio и не видели некоторых комментариев по умолчанию?
Это язык разметки и используется по многим причинам, так много, что мы, как разработчики, никогда не могли перечислить или понять их все. Во многих из этих применений Xml часто рассматривается человеком и поэтому нуждается в комментариях.
Andreas Gieriet
Хм, Интересно, почему вы все это придумали после более чем двухлетнего первоначального поста...
Будьте уверены, что я вижу много применений XML в повседневной работе.
Однако в своей вселенной я рассматриваю функцию *сериализации* как средство переноса объектов в *некотором* формате через границы процесса и сохранения данных в *некотором* формате для последующего извлечения (не обязательно предназначенного для чтения людьми). Существует множество форматов сериализации, одним из которых является XML. например, компилятор C++ может сериализовать свои объекты из памяти в файл ELF, а компоновщик снова де-сериализует файлы ELF и работает внутренне с де-сериализованными объектами, чтобы связать их.
Если мне нужен XML-файл, который читается людьми, то я хочу контролировать гораздо больше, чем просто добавлять комментарии, например, отступы и т. д.
На мой взгляд, сериализация в ее более узком смысле-это не инструмент для создания красиво отформатированных и красиво прокомментированных файлов. Итак, я хочу сказать, что если вы хотите иметь контроль, который выходит за рамки базовой сериализации, вам, возможно, придется изобрести свой собственный (де-)сериализатор.
Кстати: Вы, кажется, неправильно меня поняли, сказав, что я не ценю ценность комментариев.
С уважением
Энди