none
Как сенерировать код C# 6 из xsd для последующего использования в XmlSerializer? RRS feed

  • Вопрос

  • Добрый день! Сгенерировал с помощью xsd2code, но XmlSerializer е хочет с ним работать. Видимо, потому что там нет атрибутов вроде [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.33440")]
    [System.SerializableAttribute()]. Чем лучше сейчас и с какими параметрами командной строки преобразовывать xsd в c#? svcutil для .NET 4.6.1 выдает ошибку. Мне нужен код для .NET 4.0. Спасибо.
    29 августа 2016 г. 8:44

Ответы

  • Добрый день!

    XML Schema Definition Tool пробовали?

    29 августа 2016 г. 9:44
  • Добрый день,

    утилита не устарела, ведь с тех пор в стандарте xsd ничего не поменялось.

    Перепробовал много разных утилит, но вернулся к этой, т.к. она генерирует самый оптимальный код. Но и у неё есть свои баги...

    Мне нужен код для .NET 4.0 - А что вам это даст? Вам нужно решить проблему генерации классов или ломать голову чем отличается сериалайзер под .NET 2 от .NET 4?


    MS,MCTS,MCP,MCPD: SharePoint Developer 2010

    31 августа 2016 г. 7:14
  • Эти атрибуты по сути безразличны XmlSerializer'у.

    GeneratedCodeAttribute указывает, что код был сгенерирован автоматически, а не написан вручную программистом. Его берут во внимание в-основном утилиты для анализа кода. При его наличии они не будут, например, ругаться на форматирование и стиль кода, отличные от принятых в проекте.

    SerializableAttribute понимает, в частности, BinaryFormatter. xsd.exe добавляет его, вероятно, для того, чтобы и другие виды сериализации можно было использовать (шоб було!). Если используется только xml-сериализация, его можно смело удалять.


    В последних версиях Visual Studio есть следующая возможность генерации кода из xml/json: в меню выбираем Edit > Paste Special > Paste XML As Classes. Если в буфере обмена в этот момент будет корректный xml, то будут автоматически сгенерированы классы из него.

    • Помечено в качестве ответа Энтомолог 9 сентября 2016 г. 13:33
    7 сентября 2016 г. 22:25
  • Svcutil использовать для генерации кода можно, но, если я не ошибаюсь, он не поддерживает XML аттрибуты.

    upd. аналогичный вопрос на StackOverflow

    1 сентября 2016 г. 6:38

Все ответы

  • Добрый день!

    XML Schema Definition Tool пробовали?

    29 августа 2016 г. 9:44
  • Пробовал, но он устарел, насколько я могу судить?
    30 августа 2016 г. 15:36
  • Добрый день,

    утилита не устарела, ведь с тех пор в стандарте xsd ничего не поменялось.

    Перепробовал много разных утилит, но вернулся к этой, т.к. она генерирует самый оптимальный код. Но и у неё есть свои баги...

    Мне нужен код для .NET 4.0 - А что вам это даст? Вам нужно решить проблему генерации классов или ломать голову чем отличается сериалайзер под .NET 2 от .NET 4?


    MS,MCTS,MCP,MCPD: SharePoint Developer 2010

    31 августа 2016 г. 7:14
  • Не устарел. Это наверное единственное встроенное в Windows SDK средство для генерации классов из схем.

    Вас наверное смутило что статья, на которую я привел ссылку, помечена как This documentation is archived and is not being maintained. Тут конечно я негодяй =) Извиняюсь.

    P.S. Там в приведенном материале есть ссылка на валидную статью.


    31 августа 2016 г. 15:58
  • Если код будет под фреймворк новее 4.0, то я не смогу использовать класс в своей программу. А svcutil не подходит для генерации? У меня не получилось его запустить.
    31 августа 2016 г. 18:14
  • Svcutil использовать для генерации кода можно, но, если я не ошибаюсь, он не поддерживает XML аттрибуты.

    upd. аналогичный вопрос на StackOverflow

    1 сентября 2016 г. 6:38
  • Эти атрибуты по сути безразличны XmlSerializer'у.

    GeneratedCodeAttribute указывает, что код был сгенерирован автоматически, а не написан вручную программистом. Его берут во внимание в-основном утилиты для анализа кода. При его наличии они не будут, например, ругаться на форматирование и стиль кода, отличные от принятых в проекте.

    SerializableAttribute понимает, в частности, BinaryFormatter. xsd.exe добавляет его, вероятно, для того, чтобы и другие виды сериализации можно было использовать (шоб було!). Если используется только xml-сериализация, его можно смело удалять.


    В последних версиях Visual Studio есть следующая возможность генерации кода из xml/json: в меню выбираем Edit > Paste Special > Paste XML As Classes. Если в буфере обмена в этот момент будет корректный xml, то будут автоматически сгенерированы классы из него.

    • Помечено в качестве ответа Энтомолог 9 сентября 2016 г. 13:33
    7 сентября 2016 г. 22:25