XsdDataContractImporter 类

定义

用于将一组 XML 架构文件 (.xsd) 转换为公共语言运行库 (CLR) 类型。

public ref class XsdDataContractImporter
public class XsdDataContractImporter
type XsdDataContractImporter = class
Public Class XsdDataContractImporter
继承
XsdDataContractImporter

示例

下面的示例创建了一个 XmlSchemaSet,并调用 Import 方法来创建一个 CodeCompileUnit。 然后,使用 CodeCompileUnit 来创建 Visual C# 和 Visual Basic 代码文件。

using System;
using System.CodeDom.Compiler;
using System.CodeDom;
using System.Runtime.Serialization;
using System.IO;
using System.Xml;
using System.Xml.Schema;
using System.Globalization;

namespace XsdContractImporterExample
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                XmlSchemaSet schemas = Export();
                CodeCompileUnit ccu = Import(schemas);
                CompileCode(ccu, "Person.cs");
                CompileCode(ccu, "Person.vb");
            }
            catch (Exception exc)
            {
                Console.WriteLine("{0}: {1}", exc.Message, exc.StackTrace);
            }
            finally
            {
                Console.WriteLine("Press <Enter> to end....");
                Console.ReadLine();
            }
        }

        static XmlSchemaSet Export()
        {
            XsdDataContractExporter ex = new XsdDataContractExporter();
            ex.Export(typeof(Person));
            return ex.Schemas;
        }
        static CodeCompileUnit Import(XmlSchemaSet schemas)
        {

            XsdDataContractImporter imp = new XsdDataContractImporter();

            // The EnableDataBinding option adds a RaisePropertyChanged method to
            // the generated code. The GenerateInternal causes code access to be
            // set to internal.
            ImportOptions iOptions = new ImportOptions();
            iOptions.EnableDataBinding = true;
            iOptions.GenerateInternal = true;
            imp.Options = iOptions;

            if (imp.CanImport(schemas))
            {
                imp.Import(schemas);
                return imp.CodeCompileUnit;
            }
            else
            {
                return null;
            }
        }
        static void CompileCode(CodeCompileUnit ccu, string sourceName)
        {
            CodeDomProvider provider = null;
            FileInfo sourceFile = new FileInfo(sourceName);
            // Select the code provider based on the input file extension, either C# or Visual Basic.
            if (sourceFile.Extension.ToUpper(CultureInfo.InvariantCulture) == ".CS")
            {
                provider = new Microsoft.CSharp.CSharpCodeProvider();
            }
            else if (sourceFile.Extension.ToUpper(CultureInfo.InvariantCulture) == ".VB")
            {
                provider = new Microsoft.VisualBasic.VBCodeProvider();
            }
            else
            {
                Console.WriteLine("Source file must have a .cs or .vb extension");
            }
            if (provider != null)
            {
                CodeGeneratorOptions options = new CodeGeneratorOptions();
                // Set code formatting options to your preference.
                options.BlankLinesBetweenMembers = true;
                options.BracingStyle = "C";

                StreamWriter sw = new StreamWriter(sourceName);
                provider.GenerateCodeFromCompileUnit(ccu, sw, options);
                sw.Close();
            }
        }
    }

    [DataContract]
    public class Person
    {
        [DataMember]
        public string FirstName;

        [DataMember]
        public string LastName;

        public Person(string newFName, string newLName)
        {
            FirstName = newFName;
            LastName = newLName;
        }
    }
}
Imports System.CodeDom.Compiler
Imports System.CodeDom
Imports System.Runtime.Serialization
Imports System.IO
Imports System.Xml
Imports System.Xml.Schema
Imports System.Globalization

Class Program
   
    Shared Sub Main(ByVal args() As String) 
        Try
            Dim schemas As XmlSchemaSet = Export()
            Dim ccu As CodeCompileUnit = Import(schemas)
            CompileCode(ccu, "Person.cs")
            CompileCode(ccu, "Person.vb")
        Catch exc As Exception
            Console.WriteLine("{0}: {1}", exc.Message, exc.StackTrace)
        Finally
            Console.WriteLine("Press <Enter> to end....")
            Console.ReadLine()
        End Try
    
    End Sub 
    
    Shared Function Export() As XmlSchemaSet 
        Dim ex As New XsdDataContractExporter()
        ex.Export(GetType(Person))
        Return ex.Schemas
    End Function
    Shared Function Import(ByVal schemas As XmlSchemaSet) As CodeCompileUnit 

        Dim imp As New XsdDataContractImporter()
       ' The EnableDataBinding option adds a RaisePropertyChanged method to
       ' the generated code. The GenerateInternal causes code access to be
       ' set to internal.
       Dim iOptions As New ImportOptions()
       iOptions.EnableDataBinding = true
       iOptions.GenerateInternal = true
       imp.Options = IOptions

        If imp.CanImport(schemas) Then
            imp.Import(schemas)
            Return imp.CodeCompileUnit
        Else
            Return Nothing
        End If
    End Function

    Shared Sub CompileCode(ByVal ccu As CodeCompileUnit, ByVal sourceName As String) 
        Dim provider As CodeDomProvider = Nothing
        Dim sourceFile As New FileInfo(sourceName)
        ' Select the code provider based on the input file extension, either C# or Visual Basic.
        If sourceFile.Extension.ToUpper(CultureInfo.InvariantCulture) = ".CS" Then
            provider = New Microsoft.CSharp.CSharpCodeProvider()
        ElseIf sourceFile.Extension.ToUpper(CultureInfo.InvariantCulture) = ".VB" Then
            provider = New Microsoft.VisualBasic.VBCodeProvider()
        Else
            Console.WriteLine("Source file must have a .cs or .vb extension")
        End If
        If Not (provider Is Nothing) Then
            Dim options As New CodeGeneratorOptions()
            ' Set code formatting options to your preference. 
            options.BlankLinesBetweenMembers = True
            options.BracingStyle = "C"
            
            Dim sw As New StreamWriter(sourceName)
            provider.GenerateCodeFromCompileUnit(ccu, sw, options)
            sw.Close()
        End If
    
    End Sub
End Class

<DataContract()>  _
Public Class Person
    <DataMember()>  _
    Public FirstName As String
    
    <DataMember()>  _
    Public LastName As String
    
    
    Public Sub New(ByVal newFName As String, ByVal newLName As String) 
        FirstName = newFName
        LastName = newLName
    
    End Sub 
End Class

注解

如果所创建的 Web 服务必须与现有 Web 服务交互操作,或者要从 XML 架构创建数据协定类型,请使用 XsdDataContractImporterXsdDataContractImporter将转换一组 XML 架构,并创建以所选编程语言表示数据协定的.NET Framework类型。 若要创建代码,请使用 System.CodeDom 命名空间中的类。

反过来,在已创建的 Web 服务包含由 CLR 类型表示的数据时,以及在需要为其他 Web 服务将使用的每个数据类型导出 XML 架构时,请使用 XsdDataContractExporter 类。 也就是说,XsdDataContractExporter 能够将一组 CLR 类型转换成一组 XML 架构。

注意

若要在设计时从 XML 架构生成 CLR 类型,请使用 ServiceModel 元数据实用工具 (Svcutil.exe) 。 若要从 XSD 文件生成代码,请使用 /dataContractOnly 工具的 开关。 此外,如果需要对进程进行更多控制或者需要以编程方式执行此操作,还可以使用 XsdDataContractImporter

构造函数

XsdDataContractImporter()

初始化 XsdDataContractImporter 类的新实例。

XsdDataContractImporter(CodeCompileUnit)

使用将用于生成 CLR 代码的 XsdDataContractImporter 初始化 CodeCompileUnit 类的新实例。

属性

CodeCompileUnit

获取一个用于存储已生成的 CLR 类型的 CodeCompileUnit

Options

获取或设置一个 ImportOptions,它包含导入操作的可设置选项。

方法

CanImport(XmlSchemaSet)

获取一个值,该值指示 XmlSchemaSet 中所包含的架构是否可以转换为 CodeCompileUnit

CanImport(XmlSchemaSet, ICollection<XmlQualifiedName>)

获取一个值,该值指示 XmlSchemaSet 中包含的一组指定类型是否可以转换为生成到 CodeCompileUnit 中的 CLR 类型。

CanImport(XmlSchemaSet, XmlQualifiedName)

获取一个值,该值指示 XmlSchemaSet 中所包含的架构是否可以转换为 CodeCompileUnit

CanImport(XmlSchemaSet, XmlSchemaElement)

获取一个值,该值指示 XmlSchemaSet 中包含的特定架构元素是否可以导入。

Equals(Object)

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

(继承自 Object)
GetCodeTypeReference(XmlQualifiedName)

返回对 CLR 类型的 CodeTypeReference 引用,该 CLR 类型是为具有指定 XmlQualifiedName 的架构类型生成的。

GetCodeTypeReference(XmlQualifiedName, XmlSchemaElement)

返回指定的 XML 限定元素和架构元素的 CodeTypeReference

GetHashCode()

作为默认哈希函数。

(继承自 Object)
GetKnownTypeReferences(XmlQualifiedName)

返回一个 CodeTypeReference 对象列表,这些对象表示在为指定架构类型生成代码时生成的已知类型。

GetType()

获取当前实例的 Type

(继承自 Object)
Import(XmlSchemaSet)

XmlSchemaSet 中包含的一组指定 XML 架构转换为 CodeCompileUnit

Import(XmlSchemaSet, ICollection<XmlQualifiedName>)

XmlSchemaSet 中包含的一组指定架构类型转换为生成到 CodeCompileUnit 中的 CLR 类型。

Import(XmlSchemaSet, XmlQualifiedName)

XmlSchemaSet 中包含的指定 XML 架构类型转换为 CodeCompileUnit

Import(XmlSchemaSet, XmlSchemaElement)

将指定的 XML 架构集中的指定架构元素转换为 CodeCompileUnit,并返回用于表示指定元素的数据协定名称的 XmlQualifiedName

MemberwiseClone()

创建当前 Object 的浅表副本。

(继承自 Object)
ToString()

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

(继承自 Object)

适用于

另请参阅