Дизайн Строго типизированный объект из XML - PullRequest
6 голосов
/ 03 марта 2011

У меня есть пара файлов XML, с которыми мне нужно работать, и я всегда использовал объекты XElement и извлекал данные через имя атрибута или значение XElement.

Я знаю, что должен быть лучший способ использования XML в C #. Каков наилучший способ автоматически сгенерировать или вручную создать строго типизированный объект из файла XML?

XML находится в форме

<Group id="####">
    <title>Some Title</title>
    <description>some description</description>
    <Rule id="ID_##" severity="medium" weight="10.0">
        <version>1.001</version>
        <title>Another Title</title>
        <description>Very long description</description>
        <fixtext fixref="F-31r1_fix">Description of fix</fixtext>
        <fix id="F-31r1_fix"/>
        <check system="C-7883r4_chk">
            <check-content-ref name="M" href="URI"/>
            <check-content>Content</check-content>
        </check>
    </Rule>
</Group>

Если бы я мог разобрать файл XML в List<Group>, это было бы лучшим.

Единственный способ, которым я могу подумать - это вручную создать объекты Group, Rule и Check и назначить данные вручную. Если есть лучший, более автоматизированный способ сделать это, пожалуйста, дайте мне знать!

Ответы [ 5 ]

8 голосов
/ 03 марта 2011

Вы можете использовать xsd.exe (который устанавливается вместе с Windows SDK, но в разных местах в зависимости от версии - мой в настоящее время находится в C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin) для генерации и xsd из файла или файла кода cs.

Например:

xsd.exe myFile.xml

даст вам myFile.xsd в месте расположения файла xml.

Затем

xsd.exe myFile.xsd /c 

даст вам.cs файл с определенными классами.Попробуйте xsd.exe /? для полных опций (вы также можете указать пространства имен и т. Д.).

4 голосов
/ 03 марта 2011

Выезд Linq в XSD :

Технология LINQ to XSD предоставляет разработчикам .NET поддержку типизированного программирования XML. LINQ to XSD участвует в проекте LINQ (.NET Language Integrated Query); в частности, LINQ to XSD расширяет существующую технологию LINQ to XML.

1 голос
/ 03 марта 2011

Если вы можете изменить формат XML в соответствии со своими потребностями, я знаю один способ использования WSDL .

1 голос
/ 03 марта 2011

Вы можете поместить аннотации в ваш класс, а затем использовать XmlSerializer для сериализации / десериализации экземпляров вашего класса в / из XML - если вам нужен более индивидуальный подход, пусть ваш класс также реализует IXmlSerializable затем поместите этот код сериализации / десериализации в класс.

1 голос
/ 03 марта 2011

Если у вас есть схема для XML, вы можете создавать классы с помощью таких инструментов, как xsd.exe (Windows SDK), svcutil.exe (WCF) или (мои личные предпочтения) альтернатива с открытым исходным кодом ( Xsd2Code ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...