Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

Вы можете создавать сериализуемые классы С# из схемы (xsd) с помощью xsd.exe:

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

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

Ответ 2

Этот код (С# 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);
}

Ответ 3

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

Ответ 4

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

Ответ 5

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

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

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

Ответ 6

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

Ответ 7

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

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

Ответ 8

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

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

Ответ 9

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