Вопрос

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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 в XML очень мощный, если вы используете .net 3.5, LINQ в XSD может быть полезно и вам!

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

использование 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

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

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

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

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

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

Держу пари, что NetDataContractSerializer может делать то, что вы хотите.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top