#c# #xml
#c# #xml
Вопрос:
Я гоняюсь за своим хвостом с xsd.exe csxsd.exe и svcutil. Должно быть, я упускаю что-то основное. Мне просто нужны базовые объекты с базовыми свойствами и списками или []. Чего мне не хватает?
XSD, который я получаю, слишком сложный, и объекты не включают списки или массивы.
Спасибо,
Комментарии:
1. Итак, вы начинаете с XML-файла? И я так понимаю, вы генерируете XSD на основе его содержимого, а затем используете xsd.exe для генерации классов C #? Если да, не могли бы вы уделить время разметке XSD так, как вы хотите? При нескольких уровнях генерации кода неудивительно, что вы получаете … интересные … результаты.
2. итак… Я использовал xsd.exe сгенерировать xsd, но следующий шаг, генерирующий классы, приводит к чему-то далекому от простого класса c # со свойствами, представляющими коллекции дочерних объектов, как в xml
Ответ №1:
Для использования вам понадобится .xsd (файл схемы) xsd.exe /classes
. Если у вас нет файла .xsd, вы можете сгенерировать его с помощью инструмента, подобного этому. Большинство инструментов принимают string за тип данных, и вы можете изменить сгенерированную схему, если она вам не нравится.
Ответ №2:
Зачем создавать класс, соответствующий XML, с которым вам приходится иметь дело, и помечать его атрибутами сериализации XML, чтобы управлять его сериализацией. Это [может быть] так же просто, как:
using System.IO;
using System.Xml.Serialization;
namespace AnXmlSample
{
class Program
{
static void Main( string[] args )
{
string xml = @"<document id='3'>
<name>
document name
</name>
<foo widget-id='12' >
The quick brown fox jumped over the lazy dog
</foo>
</document>" ;
StringReader sr = new StringReader(xml) ;
XmlSerializer serializer = new XmlSerializer(typeof(MyDataFromXml)) ;
MyDataFromXml instance = (MyDataFromXml) serializer.Deserialize( sr ) ;
return ;
}
}
[XmlRoot("document")]
public class MyDataFromXml
{
[XmlAttribute("id")]
public int Id { get ; set ; }
[XmlElement("name")]
public string Name { get ; set ; }
[XmlElement("foo")]
public Widget Foo { get ; set ; }
}
public class Widget
{
[XmlAttribute("widget-id")]
public int id { get ; set ; }
[XmlText]
public string Content { get ; set ; }
}
}
Комментарии:
1. По моему опыту, когда я смотрю на код, сгенерированный
xsd.exe
, «простой» — это не то прилагательное, которое обычно приходит на ум.