2008-09-17 2 views
28

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

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

ответ

28

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

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

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

+11

[+1] Стоит отметить, что вы должны также использовать/c для генерации классов или/d для генерации производного класса DataSet при использовании XSD. В противном случае вы получите следующее сообщение об ошибке «Ошибка: может генерировать только один из классов или наборов данных». – Marc 2010-12-06 10:30:50

0

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

7

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

+2

Теперь это официальная страница для LINQ к XSD: http://linqtoxsd.codeplex.com/ – 2009-06-29 19:45:52

+0

Действительно ли это сделать отображение на C#, как указано в вопросе? – Konstantin 2009-12-16 14:07:58

+0

nah, Linq В XML нельзя использовать для сопоставления с постоянными классами. – 2010-05-12 07:55:05

2

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

2

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

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

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

18

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

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

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

1

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

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

Смежные вопросы