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

注解

XsdDataContractExporter创建包含公共语言运行时 (CLR) 类型表示的数据的 Web 服务时,以及需要导出其他 Web 服务要使用的每种类型的 XML 架构时,请使用该类。 也就是说, XsdDataContractExporter 将一组 CLR 类型转换为 XML 架构。 (有关可以使用的类型的详细信息,请参阅 数据协定序列化程序支持的类型。然后,可以通过 Web 服务描述语言(WSDL)文档公开架构,供需要与服务互作的其他人使用。

相反,如果要创建必须与现有 Web 服务互作的 Web 服务,请使用 XsdDataContractImporter 转换 XML 架构并创建表示所选编程语言中的数据的 CLR 类型。

XsdDataContractExporter 生成一个包含架构集合的 XmlSchemaSet 对象。 通过 Schemas() 属性访问架构集。

注释

若要快速生成其他 Web 服务可以使用的 XML 架构定义(XSD)文件,请使用 .XsdDataContractExporter

将架构导出到 XmlSchemaSet

若要创建包含 XML 架构文件的类的 XmlSchemaSet 实例,应注意以下事项。

要导出的类型集记录为内部数据协定集。 因此,可以多次调用 CanExport 该方法以将新类型添加到架构集,而不会降低性能,因为只会将新类型添加到集。 在 Export 操作期间,现有架构会被与要添加的新架构进行比较。 如果有冲突,则会引发异常。 如果具有相同数据协定名称但不同的协定(不同成员)的两种类型由同 XsdDataContractExporter 一实例导出,则通常会检测到冲突。

使用导出程序

建议按以下方法使用此类:

  1. 使用其中一个 CanExport 重载来确定是否可以导出指定的类型或类型集。 请使用符合您要求的重载之一。

  2. 调用相应的 Export 方法。

  3. Schemas 属性中检索架构。

构造函数

名称 说明
XsdDataContractExporter()

初始化 XsdDataContractExporter 类的新实例。

XsdDataContractExporter(XmlSchemaSet)

使用指定的架构集初始化类的新实例 XsdDataContractExporter

属性

名称 说明
Options

获取或设置一个 ExportOptions 包含可为导出操作设置的选项。

Schemas

获取导出的 XML 架构的集合。

方法

名称 说明
CanExport(ICollection<Assembly>)

获取一个值,该值指示是否可以导出一组程序集中包含的 .common language runtime (CLR) 类型集。

CanExport(ICollection<Type>)

获取一个值,该值指示是否可以导出包含在其中的 ICollection<T> .common language runtime (CLR) 类型的集。

CanExport(Type)

获取一个值,该值指示是否可以导出指定的公共语言运行时 (CLR) 类型。

Equals(Object)

确定指定的对象是否等于当前对象。

(继承自 Object)
Export(ICollection<Assembly>)

转换指定程序集集合中包含的类型。

Export(ICollection<Type>)

转换传递给此方法时 ICollection<T> 所包含的类型。

Export(Type)

将指定的 .NET 类型转换为 XML 架构定义语言 (XSD) 架构。

GetHashCode()

用作默认哈希函数。

(继承自 Object)
GetRootElementName(Type)

返回 的 Type顶级名称和命名空间。

GetSchemaType(Type)

返回指定类型的 XML 架构类型。

GetSchemaTypeName(Type)

返回 .. 的协定名称和协定命名空间 Type

GetType()

获取当前实例的 Type

(继承自 Object)
MemberwiseClone()

创建当前 Object的浅表副本。

(继承自 Object)
ToString()

返回一个表示当前对象的字符串。

(继承自 Object)

适用于

另请参阅