Как я могу предотвратить svcutil от изменения моей схемы?

Я строю struct это IXmlSerializable и мне нужно контролировать схему XML (XSD), которая создается для этого типа. Для этого я использую XmlSchemaProvider атрибут на моей структуре.

[XmlSchemaProvider("ProvideSchema")]
public struct MyStruct : IXmlSerializable { ... }

Я предоставляю схему, основанную на следующем xsd:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:tns="https://schemas.company.org/public/2011/05" elementFormDefault="qualified" targetNamespace="https://schemas.company.org/public/2011/05" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:simpleType name="MyType">
        <xs:restriction base="xs:string">
            <xs:length value="8" />
            <xs:pattern value="[0-9]{8}" />
        </xs:restriction>
    </xs:simpleType>
</xs:schema>

Когда я использую svcutil создать схему xsd из результирующей библиотеки классов:

"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\SvcUtil.exe" "$(TargetPath)" /dataContractOnly

в результате генерируется следующая схема:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:tns="https://schemas.company.org/public/2011/05" elementFormDefault="qualified" targetNamespace="https://schemas.company.org/public/2011/05" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
    <xs:simpleType name="MyType">
        <xs:annotation>
            <xs:appinfo>
                <IsValueType xmlns="http://schemas.microsoft.com/2003/10/Serialization/">true</IsValueType>
            </xs:appinfo>
        </xs:annotation>
        <xs:restriction base="xs:string">
            <xs:length value="8" />
            <xs:pattern value="[0-9]{8}" />
        </xs:restriction>
    </xs:simpleType>
</xs:schema>

Обратите внимание, что xs:import а также xs:annotation элементы добавляются.

Когда я строю свой тип как ссылочный тип (то есть класс вместо структуры), эта аннотация не добавляется.

Почему svcutil добавить эту аннотацию, и как я могу предотвратить это (не переключая структуру на тип класса)?

0 ответов

Другие вопросы по тегам