Как сопоставить объекты XML с C #

У меня есть XML, который я хочу загрузить на объекты, манипулировать этими объектами (задавать значения, читать значения), а затем сохранять эти XML обратно. Для меня важно иметь XML в структуре (xsd), которую я создал.

Один из способов сделать это – написать собственный сериализатор, но есть ли встроенная поддержка для него или с открытым исходным кодом на C #, который я могу использовать?

Вы можете генерировать сериализуемые classы C # из схемы (xsd) с помощью xsd.exe:

xsd.exe dependency1.xsd dependency2.xsd schema.xsd /out:outputDir 

Если у схемы есть зависимости (включенные / импортированные схемы), все они должны быть включены в одну и ту же командную строку.

Этот код (C # DotNet 1.0) работает достаточно хорошо, чтобы сериализовать большинство объектов в XML. (и обратно) Это не работает для объектов, содержащих ArrayLists, и, если возможно, придерживаться только массивов

 using System; using System.IO; using System.Text; using System.Xml.Serialization; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; public static string Serialize(object objectToSerialize) { MemoryStream mem = new MemoryStream(); XmlSerializer ser = new XmlSerializer(objectToSerialize.GetType()); ser.Serialize(mem, objectToSerialize); ASCIIEncoding ascii = new ASCIIEncoding(); return ascii.GetString(mem.ToArray()); } public static object Deserialize(Type typeToDeserialize, string xmlString) { byte[] bytes = Encoding.UTF8.GetBytes(xmlString); MemoryStream mem = new MemoryStream(bytes); XmlSerializer ser = new XmlSerializer(typeToDeserialize); return ser.Deserialize(mem); } 

LINQ to XML очень эффективен, если вы используете .net 3.5, LINQ to XSD может быть вам полезен!

Используйте программу командной строки xsd.exe, которая поставляется с визуальной студией для создания файлов classов, которые вы можете использовать в своем проекте / решении, и пространство имен System.Xml.Serialization (в частности, class XmlSerializer) для сериализации / десериализации этих classов в и из диск.

с использованием System.Xml.Serialization; это пространство имен имеет все необходимые атрибуты, если вы хотите сопоставить xml с любым случайным объектом. Кроме того, вы можете использовать инструмент xsd.exe

xsd file.xsd {/ classes | / dataset} [/ element: element] [/ language: language] [/ namespace: namespace] [/ outputdir: directory] [URI: uri], который возьмет ваши файлы xsd и создаст из них classы c # или vb.net.

http://msdn.microsoft.com/en-us/library/x6c1kb0s(VS.71).aspx

Я согласен, xsd действительно дерьмо … Но они сделали еще одну версию, о которой вряд ли кто-нибудь знает. Его называемый генератор объектов xsd. Его следующая версия и имеет больше возможностей. Он генерирует файлы из XSD и отлично работает. Если у вас есть генератор схемы, такой как XML-шпион; создайте xsd из вашего xml и используйте этот инструмент. С помощью этого инструмента я создал очень сложные classы. Затем создайте частичные classы для дополнительных свойств \ методы и т. Д., А затем, когда вы обновляете свою схему, вы просто возвращаете свои classы, и любые изменения сохраняются в ваших частичных classах.

http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=7075

xsd.exe от Microsoft имеет много ошибок: | Попробуйте эту жемчужину с открытым исходным кодом http://xsd2code.codeplex.com/

Мы создали фреймворк, который может автоматически генерировать classы C # из вашего XML. Его визуальный шаблон элемента, которому вы передаете свой XML и classы, автоматически создается в вашем проекте. Используя эти classы, вы можете создавать / читать / писать свой XML.

Проверьте эту ссылку для шаблона элемента framework и Visual C #: нажмите здесь

Ставлю, NetDataContractSerializer может делать то, что вы хотите.

  • Обратный (проанализировать вывод) массива Array.toString (int )
  • Как я могу расширить лексический бросок, чтобы поддерживать перечисленные типы?
  • Почему Java нуждается в интерфейсе Serializable?
  • Что и когда я должен его использовать?
  • Сериализовать значение nullable int
  • Сериализация прерываний в .NET 4.5
  • Имеет ли значение то, что я выбираю для serialVersionUID при расширении classов Serializable в Java?
  • Сериализация Java с несериализуемыми частями
  • Как сериализовать объект Exception в C #?
  • Сериализация списков classов для XML
  • Сериализация объекта в строку
  • Давайте будем гением компьютера.