Я получаю строки XML через сокет и хотел бы преобразовать их в объекты C #.
Сообщения имеют форму:
<msg>
<id>1</id>
<action>stop</action>
</msg>
Я новичок в .Net, и я не уверен, лучшая практика для выполнения этого. Я использовал JAXB для Java раньше, и не был уверен, есть ли что-то подобное, или это будет обработано по-другому.
Ответы:
Вам нужно использовать
xsd.exe
инструмент, который устанавливается вместе с Windows SDK в каталог, похожий на:И на 64-битных компьютерах:
И на компьютерах с Windows 10:
При первом запуске вы используете
xsd.exe
и конвертируете образец XML в файл XSD (файл схемы XML):Это дает вам
yourfile.xsd
, что на втором этапе вы можете снова преобразовать, используяxsd.exe
в класс C #:Это должно дать вам файл,
yourfile.cs
который будет содержать класс C #, который вы можете использовать для десериализации получаемого вами XML-файла - что-то вроде:Должно работать довольно хорошо для большинства случаев.
Обновление: XML-сериализатор будет принимать любой поток в качестве входных данных - либо файл, либо поток памяти будет в порядке:
или используйте StringReader:
источник
У вас есть две возможности.
Способ 1. XSD- инструмент
Предположим, что у вас есть файл XML в этом месте
C:\path\to\xml\file.xml
Вы можете найти ее в.
Start Menu > Programs > Microsoft Visual Studio 2012 > Visual Studio Tools
Или, если у вас Windows 8, просто начните вводить Командную строку разработчика на начальном экране.cd /D "C:\path\to\xml"
xsd file.xml
xsd /c file.xsd
И это все! Вы создали классы C # из XML-файла в
C:\path\to\xml\file.cs
Метод 2 - Специальная вставка
Требуется Visual Studio 2012+ с .Net Framework> = 4.5 в качестве цели проекта и установленным отдельным компонентом «Windows Communication Foundation».
Edit > Paste special > Paste XML As Classes
И это все!
использование
Использование этого вспомогательного класса очень просто:
Все, что вам нужно сделать сейчас, это:
источник
Попробуйте этот метод для преобразования Xml в объект. Это сделано именно для того, что вы делаете:
Позвоните, используя этот код:
источник
Просто запустите Visual Studio 2013 от имени администратора ... Скопируйте содержимое файла Xml. Перейдите в Visual Studio 2013> Правка> Специальная вставка> Вставить XML как классы C #. Он создаст ваши классы c # в соответствии с содержимым вашего файла XML.
источник
На всякий случай кто-нибудь может найти это полезным:
Вы можете позвонить, используя:
источник
Вы можете создать класс, как описано выше, или написать их вручную:
Затем вы можете использовать ExtendedXmlSerializer для сериализации и десериализации.
Установка Вы можете установить ExtendedXmlSerializer из nuget или выполнить следующую команду:
Сериализация:
Десериализация
Эта поддержка сериализатора:
ExtendedXmlSerializer поддерживает .NET 4.5 или выше и .NET Core . Вы можете интегрировать его с WebApi и AspCore.
источник
Вы можете использовать xsd.exe для создания связанных классов схемы в .Net, а затем XmlSerializer для десериализации строки: http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.deserialize.aspx
источник
Упрощение великого ответа Дамиана,
источник
Используйте приведенный ниже метод для преобразования XML String в DTO с использованием JAXB
источник
Если у вас есть xsd сообщения xml, вы можете создать классы c # с помощью инструмента .Net xsd.exe.
Эти классы .Net могут быть использованы для генерации XML.
источник
В дополнение к другим ответам здесь вы, естественно, можете использовать класс XmlDocument для чтения в стиле XML DOM или XmlReader , средство быстрой перемотки вперед, чтобы сделать это «вручную».
источник
Еще один способ с расширенными инструментами генерации классов xsd to c #: xsd2code.com. Этот инструмент очень удобный и мощный. Он имеет гораздо больше настроек, чем инструмент xsd.exe из Visual Studio. Xsd2Code ++ может быть настроен для использования списков или массивов и поддерживает большие схемы с большим количеством операторов импорта.
Обратите внимание на некоторые особенности,
источник
Я знаю, что этот вопрос старый, но я наткнулся на него, и у меня есть другой ответ, чем, ну, все остальные :-)
Обычный способ (как упоминалось выше) - создать класс и десериализовать ваш xml.
Но ( предупреждение: бесстыдная самореклама здесь ) , я только что опубликовал NuGet пакет, здесь , с которым вы не должны. Вы просто идете:
Это буквально это, больше ничего не нужно. И, самое главное, если ваш xml изменяется, ваш объект также изменяется автоматически.
Если вы предпочитаете скачать dll напрямую, страница github находится здесь .
источник
источник