XsdDataContractExporter Класс

Определение

Предоставляет возможность преобразования набора типов .NET, используемых в контрактах данных в файле схемы XML (XSD).

public ref class XsdDataContractExporter
public class XsdDataContractExporter
type XsdDataContractExporter = class
Public Class XsdDataContractExporter
Наследование
XsdDataContractExporter

Примеры

В следующем примере создается экземпляр класса XsdDataContractExporter и вызывается метод Export(Type).

using System;
using System.Xml;
using System.Runtime.Serialization;
using System.Xml.Schema;

public class Program
{
    public static void Main()
    {
        try
        {
            ExportXSD();
        }
        catch (Exception exc)
        {
            Console.WriteLine("Message: {0} StackTrace:{1}", exc.Message, exc.StackTrace);
        }
        finally
        {
            Console.ReadLine();
        }
    }

    static void ExportXSD()
    {
        XsdDataContractExporter exporter = new XsdDataContractExporter();
        if (exporter.CanExport(typeof(Employee)))
        {
            exporter.Export(typeof(Employee));
            Console.WriteLine("number of schemas: {0}", exporter.Schemas.Count);
            Console.WriteLine();
            XmlSchemaSet mySchemas = exporter.Schemas;

            XmlQualifiedName XmlNameValue = exporter.GetRootElementName(typeof(Employee));
            string EmployeeNameSpace = XmlNameValue.Namespace;

            foreach (XmlSchema schema in mySchemas.Schemas(EmployeeNameSpace))
            {
                schema.Write(Console.Out);
            }
        }
    }

    static void GetXmlElementName()
    {
        XsdDataContractExporter myExporter = new XsdDataContractExporter();
        XmlQualifiedName xmlElementName =myExporter.GetRootElementName(typeof(Employee));
        Console.WriteLine("Namespace: {0}", xmlElementName.Namespace);
        Console.WriteLine("Name: {0}", xmlElementName.Name);
        Console.WriteLine("IsEmpty: {0}", xmlElementName.IsEmpty);
    }

    [DataContract(Namespace = "www.Contoso.com/Examples/")]
    public class Employee
    {
        [DataMember]
        public string EmployeeName;
        [DataMember]
        private string ID;
    }
}
Imports System.Collections
Imports System.Xml
Imports System.Runtime.Serialization
Imports System.Xml.Schema

Public Class Program
    Public Shared Sub Main() 
        Try
            ExportXSD()
        Catch exc As Exception
            Console.WriteLine("Message: {0} StackTrace:{1}", exc.Message, exc.StackTrace)
        Finally
            Console.ReadLine()
        End Try
    
    End Sub 
    
    
    Shared Sub ExportXSD() 

        Dim exporter As New XsdDataContractExporter()

        ' Use the ExportOptions to add the Possessions type to the 
        ' collection of KnownTypes. 
        Dim eOptions As New ExportOptions()
        eOptions.KnownTypes.Add(GetType(Possessions))        
        exporter.Options = eOptions

        If exporter.CanExport(GetType(Employee)) Then
            exporter.Export(GetType(Employee))
            Console.WriteLine("number of schemas: {0}", exporter.Schemas.Count)
            Console.WriteLine()
            Dim mySchemas As XmlSchemaSet = exporter.Schemas
            
            Dim XmlNameValue As XmlQualifiedName = _
               exporter.GetRootElementName(GetType(Employee))
            Dim EmployeeNameSpace As String = XmlNameValue.Namespace
            
            Dim schema As XmlSchema
            For Each schema In  mySchemas.Schemas(EmployeeNameSpace)
                schema.Write(Console.Out)
            Next schema
        End If
    
    End Sub 
    
    
    Shared Sub GetXmlElementName() 
        Dim myExporter As New XsdDataContractExporter()
        Dim xmlElementName As XmlQualifiedName = myExporter. _
            GetRootElementName(GetType(Employee))
        Console.WriteLine("Namespace: {0}", xmlElementName.Namespace)
        Console.WriteLine("Name: {0}", xmlElementName.Name)
        Console.WriteLine("IsEmpty: {0}", xmlElementName.IsEmpty)
    
    End Sub 
    
    <DataContract([Namespace] := "www.Contoso.com/Examples/")>  _
    Public Class Employee

        <DataMember()>  _
        Public EmployeeName As String
        <DataMember()>  _
        Private ID As String
        ' This member may return a Possessions type.
        <DataMember> _
        public Miscellaneous As Hashtable 

    End Class 

    <DataContract> _
    Public Class Possessions

        <DataMember> _
        Public ItemName As String
    End Class

End Class

Комментарии

Если была создана веб-служба, которая добавляет данные, представленные типами среды CLR, и требуется экспортировать схемы XML для каждого типа, используемого другими веб-службами, используйте класс XsdDataContractExporter. Таким образом, XsdDataContractExporter преобразует набор типов среды CLR в схемы XML. (Дополнительные сведения о типах, которые можно использовать, см. в разделе "Типы, поддерживаемые сериализатором контракта данных".) Затем схемы можно предоставить с помощью документа языка описания веб-служб (WSDL) для использования другими пользователями, которым необходимо взаимодействовать со службой.

И наоборот, при создании веб-службы, которая должна будет взаимодействовать с существующей службой, используйте XsdDataContractImporter для преобразования схем XML и создания типов среды CLR, представляющих данные в выбранном языке программирования.

XsdDataContractExporter создает объект XmlSchemaSet, содержащий коллекцию схем. Доступ к набору схем осуществляется через свойство Schemas.

Примечание

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

Экспорт схем в XmlSchemaSet

Для создания экземпляра класса XmlSchemaSet, содержащего файлы схемы XML, необходимо знать следующее.

Набор экспортируемых типов записывается как внутренний набор контрактов данных. Таким образом, можно вызвать метод CanExport несколько раз, чтобы добавить новые типы в набор схем; это не снизит производительность, так как в набор будут добавлены только новые типы. При выполнении операции Export существующие схемы сравниваются с добавляемыми новыми схемами. При возникновении конфликтов будет выдано исключение. Обычно конфликт возникает, когда два типа с одним и тем же именем контракта данных, но разными контрактами (разными элементами), экспортируются одним и тем же экземпляром XsdDataContractExporter.

Использование средства экспорта

Рекомендуется использовать этот класс следующим образом.

  1. Используйте одну из перегрузок CanExport, чтобы определить, возможен ли экспорт указанного типа или набора типов. Используйте одну из перегрузок, соответствующую предъявляемым требованиям.

  2. Вызовите соответствующий метод Export.

  3. Извлеките схемы из свойства Schemas.

Конструкторы

XsdDataContractExporter()

Инициализирует новый экземпляр класса XsdDataContractExporter.

XsdDataContractExporter(XmlSchemaSet)

Инициализирует новый экземпляр класса XsdDataContractExporter с указанным набором схем.

Свойства

Options

Возвращает или задает объект ExportOptions, содержащий параметры, которые могут быть заданы для операции экспорта.

Schemas

Возвращает коллекцию экспортированных схем XML.

Методы

CanExport(ICollection<Assembly>)

Возвращает значение, указывающее, возможен ли экспорт набора типов среды CLR, содержащегося в наборе сборок.

CanExport(ICollection<Type>)

Возвращает значение, указывающее, возможен ли экспорт набора типов среды CLR, содержащегося в ICollection<T>.

CanExport(Type)

Возвращает значение, указывающее, возможен ли экспорт заданного типа среды CLR.

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
Export(ICollection<Assembly>)

Преобразует типы, содержащиеся в указанной коллекции сборок.

Export(ICollection<Type>)

Преобразует типы, содержащиеся в ICollection<T>, переданной в этот метод.

Export(Type)

Преобразует указанный тип платформа .NET Framework в схему языка XSD.

GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetRootElementName(Type)

Возвращает имя верхнего уровня и пространство имен для типа Type.

GetSchemaType(Type)

Возвращает схему XML для заданного типа.

GetSchemaTypeName(Type)

Возвращает имя контракта и пространство имен контракта для типа Type.

GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)

Применяется к

См. также раздел