XsdDataContractImporter 類別

定義

允許將 XML 結構描述檔案 (.xsd) 集合轉換為 Common Language Runtime (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 命名空間 (Namespace) 中的類別。

相對地,當您已建立合併 CLR 型別表示之資料的 Web 服務,以及當您需要匯出其他 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)

CodeTypeReference 傳回給具有已指定 XmlQualifiedName 之結構描述型別所產生的 CLR 型別。

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)

適用於

另請參閱