次の方法で共有


SoapAttributeAttribute.DataType プロパティ

XmlSerializer によって生成された SOAP 属性の XML スキーマ定義言語 (XSD) データ型を取得または設定します。

Public Property DataType As String
[C#]
public string DataType {get; set;}
[C++]
public: __property String* get_DataType();public: __property void set_DataType(String*);
[JScript]
public function get DataType() : String;public function set DataType(String);

プロパティ値

W3C (World Wide Web Consortium) (www.w3.org) のドキュメント『XML Schema Part 2: Datatypes』で定義されている XML スキーマ データ型。

例外

例外の種類 条件
Exception 指定した XML スキーマ データ型を .NET データ型に割り当てることができません。

解説

XML スキーマの単純データ型と、それに相当する .NET データ型の表を次に示します。

XML スキーマの base64Binary データ型と hexBinary データ型については、 Byte 構造体の配列を使用し、 DataType をそれぞれ "base64Binary" または "hexBinary" に設定した SoapAttributeAttribute を適用します。XML スキーマの time データ型と date データ型については、 DateTime 型を使用して、 DataType を "date" または "time" に設定した SoapAttributeAttribute を適用します。

文字列に割り当てられるすべての XML スキーマ データ型については、 DataType プロパティをその XML スキーマ データ型に設定した SoapAttributeAttribute を適用します。これにより、メンバのスキーマだけが変更され、シリアル化形式は変更されなくなります。

メモ   このプロパティでは大文字と小文字が区別されるため、XML スキーマ データ型を正しく設定する必要があります。

メモ   バイナリ データは、XML 属性として渡すよりも XML 要素として渡す方が効率的です。

XML スキーマ データ型の詳細については、W3C (World Wide Web Consortium) (www.w3.org) のドキュメント『XML Schema Part 2: Datatypes』を参照してください。

XSD データ型 .NET データ型
anyURI String
base64Binary Byte オブジェクトの配列
boolean Boolean
byte SByte
date DateTime
dateTime DateTime
decimal Decimal
double Double
ENTITY String
ENTITIES String
float Single
gDay String
gMonth String
gMonthDay String
gYear String
gYearMonth String
hexBinary Byte オブジェクトの配列
ID String
IDREF String
IDREFS String
int Int32
integer String
language String
long Int64
Name String
NCName String
negativeInteger String
NMTOKEN String
NMTOKENS String
normalizedString String
nonNegativeInteger String
nonPositiveInteger String
NOTATION String
positiveInteger String
QName XmlQualifiedName
duration String
string String
short Int16
time DateTime
token String
unsignedByte Byte
unsignedInt UInt32
unsignedLong UInt64
unsignedShort UInt16

使用例

[Visual Basic, C#, C++] SoapAttributeAttribute の適用対象となる複数のフィールドが含まれているクラスをシリアル化する例を次に示します。 GroupNumber フィールドと Today フィールドに対して DataType プロパティが設定されています。

 
Imports System
Imports System.IO
Imports System.Text
Imports System.Xml
Imports System.Xml.Serialization
Imports System.Xml.Schema

<SoapInclude(GetType(Vehicle))> _
Public Class Group

   <SoapAttribute (Namespace:= "http:'www.cpandl.com")> _
   Public GroupName As String    
   <SoapAttribute(DataType:= "base64Binary")> _
   Public GroupNumber() As  Byte 

   <SoapAttribute(DataType:= "date", AttributeName:= "CreationDate")> _
   Public Today As DateTime 
   <SoapElement(DataType:= "nonNegativeInteger", _
   ElementName:= "PosInt")> _
   Public PostitiveInt As String 

   Public GroupVehicle As Vehicle 
End Class
  
Public Class Vehicle
   Public licenseNumber As String 
End Class

Public Class Run

   Shared Sub Main()
   
      Dim test As Run = New Run()
      test.SerializeObject("SoapAtts.xml")
      test.DeserializeObject("SoapAtts.xml")
   End Sub
   
   Public Sub SerializeObject(filename As String)
   
      ' Create an instance of the XmlSerializer Class that
      ' can generate encoded SOAP messages.
      Dim mySerializer As XmlSerializer  =  ReturnSOAPSerializer()

      Dim myGroup As Group = MakeGroup()
      ' Writing the file requires a TextWriter.
      Dim writer As XmlTextWriter = _
      New XmlTextWriter(filename, Encoding.UTF8)
      writer.Formatting = Formatting.Indented
      writer.WriteStartElement("wrapper")
      ' Serialize the Class, and close the TextWriter.
      mySerializer.Serialize(writer, myGroup)
      writer.WriteEndElement()
      writer.Close()
   End Sub

   Private Function MakeGroup() As Group 
      ' Create an instance of the Class that will be serialized.
      Dim myGroup As Group = New Group()

      ' Set the object properties.
      myGroup.GroupName = ".NET"

      Dim hexByte() As Byte= New Byte(1){Convert.ToByte(100), _
      Convert.ToByte(50)}
      myGroup.GroupNumber = hexByte

      Dim myDate As DateTime = New DateTime(2002,5,2)
      myGroup.Today = myDate
      myGroup.PostitiveInt= "10000"
      myGroup.GroupVehicle = New Vehicle()
      myGroup.GroupVehicle.licenseNumber="1234"
      return myGroup
   End Function       

   Public Sub DeserializeObject(filename As String)
      ' Create an instance of the XmlSerializer Class that
      ' can generate encoded SOAP messages.
      Dim mySerializer As XmlSerializer =  ReturnSOAPSerializer()

      ' Reading the file requires an  XmlTextReader.
      Dim reader As XmlTextReader = _
      New XmlTextReader(filename)
      reader.ReadStartElement("wrapper")

      ' Deserialize and cast the object.
      Dim myGroup As Group 
      myGroup = _
      CType(mySerializer.Deserialize(reader), Group)
      reader.ReadEndElement()
      reader.Close()

   End Sub
   
   private Function ReturnSOAPSerializer() As XmlSerializer 
      ' Create an instance of the XmlSerializer Class.
      Dim myMapping As XmlTypeMapping = _
      (New SoapReflectionImporter().ImportTypeMapping _
      (GetType(Group)))
       return New XmlSerializer(myMapping)
   End Function
End Class

[C#] 
using System;
using System.IO;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
using System.Xml.Schema;

[SoapInclude(typeof(Vehicle))]
public class Group
{
   [SoapAttribute (Namespace = "http://www.cpandl.com")]
   public string GroupName;
   
   [SoapAttribute(DataType = "base64Binary")]
   public Byte [] GroupNumber;

   [SoapAttribute(DataType = "date", AttributeName = "CreationDate")]
   public DateTime Today;
   [SoapElement(DataType = "nonNegativeInteger", ElementName = "PosInt")]
   public string PostitiveInt;

   public Vehicle GroupVehicle;
}
  
public class Vehicle
{
   public string licenseNumber;
}

public class Run
{
   public static void Main()
   {
      Run test = new Run();
      test.SerializeObject("SoapAtts.xml");
      test.DeserializeObject("SoapAtts.xml");
   }
   public void SerializeObject(string filename)
   {
      // Create an instance of the XmlSerializer class that
      // can generate encoded SOAP messages.
      XmlSerializer mySerializer =  ReturnSOAPSerializer();

      Group myGroup=MakeGroup();
      // Writing the file requires a TextWriter.
      XmlTextWriter writer = 
      new XmlTextWriter(filename, Encoding.UTF8);
      writer.Formatting = Formatting.Indented;
      writer.WriteStartElement("wrapper");
      // Serialize the class, and close the TextWriter.
      mySerializer.Serialize(writer, myGroup);
      writer.WriteEndElement();
      writer.Close();
   }

   private Group MakeGroup(){
      // Create an instance of the class that will be serialized.
      Group myGroup = new Group();

      // Set the object properties.
      myGroup.GroupName = ".NET";

      Byte [] hexByte = new Byte[2]{Convert.ToByte(100),
      Convert.ToByte(50)};
      myGroup.GroupNumber = hexByte;

      DateTime myDate = new DateTime(2002,5,2);
      myGroup.Today = myDate;
      myGroup.PostitiveInt= "10000";
      myGroup.GroupVehicle = new Vehicle();
      myGroup.GroupVehicle.licenseNumber="1234";
      return myGroup;
   }       

   public void DeserializeObject(string filename)
   {
      // Create an instance of the XmlSerializer class that
      // can generate encoded SOAP messages.
      XmlSerializer mySerializer =  ReturnSOAPSerializer();

      // Reading the file requires an  XmlTextReader.
      XmlTextReader reader= 
      new XmlTextReader(filename);
      reader.ReadStartElement("wrapper");

      // Deserialize and cast the object.
      Group myGroup; 
      myGroup = (Group) mySerializer.Deserialize(reader);
      reader.ReadEndElement();
      reader.Close();

   }
   
   private XmlSerializer ReturnSOAPSerializer(){
      // Create an instance of the XmlSerializer class.
      XmlTypeMapping myMapping = 
      (new SoapReflectionImporter().ImportTypeMapping
      (typeof(Group)));
       return new XmlSerializer(myMapping);
   }
}

[C++] 
#using <mscorlib.dll>
#using <System.dll>
#using <System.Xml.dll>

using namespace System;
using namespace System::IO;
using namespace System::Text;
using namespace System::Xml;
using namespace System::Xml::Serialization;
using namespace System::Xml::Schema;
//using namespace System::Runtime::Remoting::Metadata;

public __gc class Vehicle {
public:
    String* licenseNumber;
};

[SoapInclude(__typeof(Vehicle))]
public __gc class Group {
public:
    [SoapAttributeAttribute (Namespace = S"http://www.cpandl.com")]
    String* GroupName;

    [SoapAttributeAttribute(DataType = S"base64Binary")]
    Byte GroupNumber[];

    [SoapAttributeAttribute(DataType = S"date", AttributeName = S"CreationDate")]
    DateTime Today;

    [SoapElement(DataType = S"nonNegativeInteger", ElementName = S"PosInt")]
    String* PostitiveInt;

    Vehicle* GroupVehicle;
};

public __gc class Run {
public:
    void SerializeObject(String* filename) {
        // Create an instance of the XmlSerializer class that
        // can generate encoded SOAP messages.
        XmlSerializer* mySerializer =  ReturnSOAPSerializer();

        Group* myGroup=MakeGroup();
        // Writing the file requires a TextWriter.
        XmlTextWriter* writer = new XmlTextWriter(filename, Encoding::UTF8);
        writer->Formatting = Formatting::Indented;
        writer->WriteStartElement(S"wrapper");
        // Serialize the class, and close the TextWriter.
        mySerializer->Serialize(writer, myGroup);
        writer->WriteEndElement();
        writer->Close();
    }

private:
    Group* MakeGroup() {
        // Create an instance of the class that will be serialized.
        Group* myGroup = new Group();

        // Set the Object* properties.
        myGroup->GroupName = S".NET";

        Byte hexByte[] = {Convert::ToByte(100),
            Convert::ToByte(50)};
        myGroup->GroupNumber = hexByte;

        DateTime myDate = DateTime(2002, 5, 2);
        myGroup->Today = myDate;
        myGroup->PostitiveInt= S"10000";
        myGroup->GroupVehicle = new Vehicle();
        myGroup->GroupVehicle->licenseNumber=S"1234";
        return myGroup;
    }       

public:
    void DeserializeObject(String* filename) {
        // Create an instance of the XmlSerializer class that
        // can generate encoded SOAP messages.
        XmlSerializer* mySerializer =  ReturnSOAPSerializer();

        // Reading the file requires an  XmlTextReader.
        XmlTextReader* reader = new XmlTextReader(filename);
        reader->ReadStartElement(S"wrapper");

        // Deserialize and cast the Object*.
        Group* myGroup; 
        myGroup = __try_cast<Group*>( mySerializer->Deserialize(reader) );
        reader->ReadEndElement();
        reader->Close();

    }

private:
    XmlSerializer* ReturnSOAPSerializer() {
        // Create an instance of the XmlSerializer class.
        XmlTypeMapping* myMapping = 
            (new SoapReflectionImporter())->ImportTypeMapping(__typeof(Group));
        return new XmlSerializer(myMapping);
    }
};

int main() {
    Run* test = new Run();
    test->SerializeObject(S"SoapAtts.xml");
    test->DeserializeObject(S"SoapAtts.xml");
}

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET

参照

SoapAttributeAttribute クラス | SoapAttributeAttribute メンバ | System.Xml.Serialization 名前空間