XPathQueryGenerator Klasa

Definicja

Gdy dana klasa reprezentująca kontrakt danych i metadane reprezentujące element członkowski kontraktu, tworzy zapytanie XPath dla elementu członkowskiego.

C#
public static class XPathQueryGenerator
Dziedziczenie
XPathQueryGenerator

Przykłady

Poniższy przykład tworzy zapytania XPath z dwóch klas, do których DataContractAttribute zastosowano atrybuty i DataMemberAttribute .

C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using System.Runtime.Serialization;
using System.Xml;

namespace GeneratPathExample
{
    class Program
    {
        static void Main(string[] args)
        {
            // Get the type of the class that defines the data contract.
            Type t = typeof(Order);

            // Get the meta data for the specific members to be used in the query.
            MemberInfo[] mi = t.GetMember("Product");
            MemberInfo[] mi2 = t.GetMember("Value");
            MemberInfo[] mi3 = t.GetMember("Quantity");

            // Call the function below to generate and display the query.
            GenerateXPath(t, mi);
            GenerateXPath(t, mi2);
            GenerateXPath(t, mi3);

            // Get the type of the second class that defines a data contract.
            Type t2 = typeof(Line);

            // Get the meta data for the member to be used in the query.
            MemberInfo[] mi4 = t2.GetMember("Items");

            GenerateXPath(t2, mi4);

            Console.ReadLine();
        }

        static void GenerateXPath(Type t, MemberInfo[] mi)
        {

            // Create a new name table and name space manager.
            NameTable nt = new NameTable();
            XmlNamespaceManager xname = new XmlNamespaceManager(nt);

            // Generate the query and print it.
            string query = XPathQueryGenerator.CreateFromDataContractSerializer(
                t, mi, out xname);
            Console.WriteLine(query);
            Console.WriteLine();

            // Display the namespaces and prefixes used in the data contract.
            foreach (string s in xname)
                Console.WriteLine("{0}  = {1}", s, xname.LookupNamespace(s));

            Console.WriteLine();
        }
    }

    [DataContract(Namespace = "http://www.cohowinery.com/")]
    public class Line
    {
        private Order[] itemsValue;

        [DataMember]
        public Order[] Items
        {
            get { return itemsValue; }
            set { itemsValue = value; }
        }
    }

    [DataContract(Namespace = "http://contoso.com")]
    public class Order
    {
        private string productValue;
        private int quantityValue;
        private decimal valueValue;

        [DataMember(Name = "cost")]
        public decimal Value
        {
            get { return valueValue; }
            set { valueValue = value; }
        }

        [DataMember(Name = "quantity")]
        public int Quantity
        {
            get { return quantityValue; }
            set { quantityValue = value; }
        }

        [DataMember(Name = "productName")]
        public string Product
        {
            get { return productValue; }
            set { productValue = value; }
        }
    }
}

Uwagi

Aby uzyskać więcej informacji na temat kontraktów danych, zobacz Korzystanie z kontraktów danych.

Aby użyć klasy , należy wykonać cztery kroki:

  1. Utwórz typ kontraktu danych, DataContractAttribute stosując element i DataMemberAttribute odpowiednio do typu i jego pól lub właściwości.

  2. GetMember Użyj metody Type klasy, aby wygenerować tablicę MemberInfo.

  3. Przekaż typ i tablicę do metody .

  4. W razie potrzeby użyj parametru zwróconego XmlNamespaceManager namespaces przez parametr , aby zbadać przestrzenie nazw XML przywoływane przez prefiksy przestrzeni nazw w zapytaniu XPath.

Uwaga

Prefiks przestrzeni nazw "xg" (dla "generatora XPath") jest używany jako domyślny w ścieżce XPath. Tego nie można zmienić. Zamiast tego zapoznaj się z kolekcją NameTable, aby zobaczyć, z jaką przestrzenią nazw jest skojarzony prefiks.

Metody

CreateFromDataContractSerializer(Type, MemberInfo[], StringBuilder, XmlNamespaceManager)

Tworzy ścieżkę XPath na podstawie kontraktu danych przy użyciu określonego typu danych kontraktu, tablicy elementów metadanych, elementu najwyższego poziomu i przestrzeni nazw.

CreateFromDataContractSerializer(Type, MemberInfo[], XmlNamespaceManager)

Tworzy ścieżkę XPath na podstawie kontraktu danych przy użyciu określonego typu kontraktu danych, tablicy elementów metadanych i przestrzeni nazw.

Dotyczy

Produkt Wersje
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8
.NET Standard 2.0, 2.1