XmlSerializer.UnreferencedObject イベントとは? わかりやすく解説

Weblio 辞書 > コンピュータ > .NET Framework クラス ライブラリ リファレンス > XmlSerializer.UnreferencedObject イベントの意味・解説 

XmlSerializer.UnreferencedObject イベント

SOAP エンコード済み XML ストリームの逆シリアル化時に、XmlSerializer が、未使用の型または参照されていない型を認識した場合発生します

名前空間: System.Xml.Serialization
アセンブリ: System.Xml (system.xml.dll 内)
構文構文

Public Event UnreferencedObject As
 UnreferencedObjectEventHandler
Dim instance As XmlSerializer
Dim handler As UnreferencedObjectEventHandler

AddHandler instance.UnreferencedObject, handler
public event UnreferencedObjectEventHandler UnreferencedObject
public:
event UnreferencedObjectEventHandler^ UnreferencedObject {
    void add (UnreferencedObjectEventHandler^ value);
    void remove (UnreferencedObjectEventHandler^ value);
}
/** @event */
public void add_UnreferencedObject (UnreferencedObjectEventHandler
 value)

/** @event */
public void remove_UnreferencedObject (UnreferencedObjectEventHandler
 value)
JScript では、イベント使用できますが、新規に宣言することはできません。
解説解説

UnreferencedObject イベントは、XmlSerializer使用してW3C (World Wide Web Consortium) (www.w3.org) のドキュメントSimple Object Access Protocol (SOAP) 1.1』のセクション 5 に準拠する SOAP メッセージ含まれている XML ドキュメントを逆シリアル化する場合にだけ発生します

セクション 5 に準拠するドキュメントは、特別な形式ドキュメントです。このようなドキュメントには、少なくとも SOAP メッセージ本文含まれています。しかし、すべての型がこのようなドキュメント内でインライン定義されているのではなく一部の型定義がドキュメント内の最上位要素への参照としてエンコードされている場合あります。したがって本文内にある要素のうち、このような参照である要素については、それぞれの型定義を含む対応した要素存在している必要があります参照側の要素とその型定義に相関関係持たせるには、一意文字列 ID設定されid 属性を型定義に適用し参照側の要素には、同じ ID参照する href 属性適用します。

 <Group xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" n1:GroupName=".NET" GroupNumber="ZDI=" CreationDate="2002-05-02" xmlns:n1="http:'www.cpandl.com">
     <PosInt xsi:type="xsd:nonNegativeInteger">10000</PosInt>
     <GroupVehicle href="#id2" />
   </Group>
   <Vehicle n1:type="Vehicle" xmlns:n1="http://www.w3.org/2001/XMLSchema-instance">
     <licenseNumber xmlns:q1="http://www.w3.org/2001/XMLSchema" n1:type="q1:string">1234</licenseNumber>
   </Vehicle>

つまり、UnreferencedObject イベントは、ドキュメント内に型定義はあるが、その定義を参照するパラメータ本文内にない場合発生します。このイベント発生した場合は、UnreferencedObjectEventArgs クラスの UnreferencedObject プロパティ調べることによって、未参照オブジェクトXML 型を取得できます。UnreferencedId プロパティによって返されるオブジェクトXML ID

UnreferencedObject イベントを UnknownElement イベントや UnknownNode イベント混同しないようにしてください。これらのイベントは、XML ノード型や XML 要素型に対応するクラス メンバ存在しないときに発生します

使用例使用例

UnreferencedObjectEventHandler を XmlSerializer追加する例を次に示しますイベントは、Serializer_UnreferencedObject メソッドによって処理されます。このサンプル コード実行するには、"UnrefObj.xml" という名前のファイルに、次の XML切り取って貼り付けます。

 <wrapper>
   <Group xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" n1:GroupName=".NET" xmlns:n1="http://www.cpandl.com">
    </Group>
 <Vehicle n1:type="Vehicle" xmlns:n1="http://www.w3.org/2001/XMLSchema-instance">
     <licenseNumber xmlns:q1="http://www.w3.org/2001/XMLSchema" n1:type="q1:string">ABCD</licenseNumber>
   </Vehicle>
 <Vehicle n1:type="Vehicle" xmlns:n1="http://www.w3.org/2001/XMLSchema-instance">
     <licenseNumber xmlns:q1="http://www.w3.org/2001/XMLSchema" n1:type="q1:string">1234</licenseNumber>
   </Vehicle>
 </wrapper>
Imports System
Imports System.IO
Imports System.Text
Imports System.Xml
Imports System.Xml.Serialization
Imports System.Xml.Schema

' You must use the SoapIncludeAttribute to inform the XmlSerializer
' that the Vehicle type should be recognized when deserializing.
<SoapInclude(GetType(Vehicle))> _
Public Class Group
    Public GroupName 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.DeserializeObject("UnrefObj.xml")
   End Sub
   
   Public Sub DeserializeObject(filename As
 String)
      ' Create an instance of the XmlSerializer class.
      Dim myMapping As XmlTypeMapping = _
      (new SoapReflectionImporter().ImportTypeMapping _
      (GetType(Group)))
      Dim mySerializer As XmlSerializer = 
 _
      new XmlSerializer(myMapping)

      AddHandler mySerializer.UnreferencedObject, _
      AddressOf Serializer_UnreferencedObject

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

      ' Deserialize and cast the object.
      Dim myGroup As Group  
      myGroup = CType( mySerializer.Deserialize(reader), Group)
      reader.ReadEndElement()
      reader.Close()
   End Sub
   
   Private Sub Serializer_UnreferencedObject
 _
   (sender As object , e As
 UnreferencedObjectEventArgs)
      Console.WriteLine("UnreferencedObject:")
      Console.WriteLine("ID: " + e.UnreferencedId)
      Console.WriteLine("UnreferencedObject: " + e.UnreferencedObject)
      Dim myVehicle As Vehicle = CType(e.UnreferencedObject,
 Vehicle)
      Console.WriteLine("License: " + myVehicle.licenseNumber)
       End Sub
 End Class
 
' The XML document should contain this information:

'<wrapper>

'  <Group xmlns:xsi="http:'www.w3.org/2001/XMLSchema-instance"
 
'xmlns:xsd="http:'www.w3.org/2001/XMLSchema" id="id1"
 
'n1:GroupName=".NET" xmlns:n1="http:'www.cpandl.com">
'   </Group>

'<Vehicle id="id2" n1:type="Vehicle" 
'xmlns:n1="http:'www.w3.org/2001/XMLSchema-instance">
'    <licenseNumber xmlns:q1="http:'www.w3.org/2001/XMLSchema"
 
'n1:type="q1:string">ABCD</licenseNumber>
'  </Vehicle>

'<Vehicle id="id3" n1:type="Vehicle" 
'xmlns:n1="http:'www.w3.org/2001/XMLSchema-instance">
'    <licenseNumber xmlns:q1="http:'www.w3.org/2001/XMLSchema"
 
'n1:type="q1:string">1234</licenseNumber>
'  </Vehicle>

'</wrapper>

using System;
using System.IO;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
using System.Xml.Schema;

// You must use the SoapIncludeAttribute to inform the XmlSerializer
// that the Vehicle type should be recognized when deserializing.
[SoapInclude(typeof(Vehicle))]
public class Group
{
   public string GroupName;
   public Vehicle GroupVehicle;
}
 [SoapInclude(typeof(Vehicle))]
public class Vehicle
{
   public string licenseNumber;
}

public class Run
{
   public static void Main()
   {
      Run test = new Run();
      test.DeserializeObject("UnrefObj.xml");
   }
   
   public void DeserializeObject(string
 filename)
   {
      // Create an instance of the XmlSerializer class.
      XmlTypeMapping myMapping = 
      (new SoapReflectionImporter().ImportTypeMapping(
      typeof(Group)));
      XmlSerializer mySerializer =  
      new XmlSerializer(myMapping);
 
      mySerializer.UnreferencedObject += 
      new UnreferencedObjectEventHandler
      (Serializer_UnreferencedObject);

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

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

   private void Serializer_UnreferencedObject
   (object sender, UnreferencedObjectEventArgs e){
      Console.WriteLine("UnreferencedObject:");
      Console.WriteLine("ID: " + e.UnreferencedId);
      Console.WriteLine("UnreferencedObject: " + e.UnreferencedObject);
      Vehicle myVehicle = (Vehicle) e.UnreferencedObject;
      Console.WriteLine("License: " + myVehicle.licenseNumber);
   }
}

// The file named "UnrefObj.xml" should contain this XML:

// <wrapper>

//  <Group xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 
//xmlns:xsd="http://www.w3.org/2001/XMLSchema" id="id1"
 
//n1:GroupName=".NET" xmlns:n1="http://www.cpandl.com">
//   </Group>

//<Vehicle id="id2" n1:type="Vehicle" 
//xmlns:n1="http://www.w3.org/2001/XMLSchema-instance">
//   <licenseNumber xmlns:q1="http://www.w3.org/2001/XMLSchema"
 
//n1:type="q1:string">ABCD</licenseNumber>
//   </Vehicle>

//<Vehicle id="id3" n1:type="Vehicle" 
//xmlns:n1="http://www.w3.org/2001/XMLSchema-instance">
//    <licenseNumber xmlns:q1="http://www.w3.org/2001/XMLSchema"
 
//n1:type="q1:string">1234</licenseNumber>
//  </Vehicle>

//</wrapper>

#using <System.Xml.dll>
#using <System.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;

ref class Vehicle;

[SoapInclude(Vehicle::typeid)]
public ref class Vehicle
{
public:
   String^ licenseNumber;
};


// You must use the SoapIncludeAttribute to inform the XmlSerializer
// that the Vehicle type should be recognized when deserializing.

[SoapInclude(Vehicle::typeid)]
public ref class Group
{
public:
   String^ GroupName;
   Vehicle^ GroupVehicle;
};

public ref class Run
{
public:
   void DeserializeObject( String^ filename )
   {
      // Create an instance of the XmlSerializer class.
      XmlTypeMapping^ myMapping = ((gcnew SoapReflectionImporter)->ImportTypeMapping(
 Group::typeid ));
      XmlSerializer^ mySerializer = gcnew XmlSerializer( myMapping );
      mySerializer->UnreferencedObject += gcnew UnreferencedObjectEventHandler(
 this, &Run::Serializer_UnreferencedObject );
      
      // Reading the file requires an  XmlTextReader.
      XmlTextReader^ reader = gcnew XmlTextReader( filename );
      reader->ReadStartElement();
      
      // Deserialize and cast the object.
      Group^ myGroup;
      myGroup = dynamic_cast<Group^>(mySerializer->Deserialize( reader ));
      reader->ReadEndElement();
      reader->Close();
   }

private:
   void Serializer_UnreferencedObject( Object^ /*sender*/, UnreferencedObjectEventArgs^
 e )
   {
      Console::WriteLine( "UnreferencedObject:" );
      Console::WriteLine( "ID: {0}", e->UnreferencedId );
      Console::WriteLine( "UnreferencedObject: {0}", e->UnreferencedObject
 );
      Vehicle^ myVehicle = dynamic_cast<Vehicle^>(e->UnreferencedObject);
      Console::WriteLine( "License: {0}", myVehicle->licenseNumber );
   }
};

int main()
{
   Run^ test = gcnew Run;
   test->DeserializeObject( "UnrefObj.xml" );
}

// The file named S"UnrefObj.xml" should contain this XML:
// <wrapper>
//  <Group xmlns:xsi=S"http://www.w3.org/2001/XMLSchema-instance"
 
//xmlns:xsd=S"http://www.w3.org/2001/XMLSchema" id=S"id1"
 
//n1:GroupName=S".NET" xmlns:n1=S"http://www.cpandl.com">
//   </Group>
//<Vehicle id=S"id2" n1:type=S"Vehicle" 
//xmlns:n1=S"http://www.w3.org/2001/XMLSchema-instance">
//   <licenseNumber xmlns:q1=S"http://www.w3.org/2001/XMLSchema"
 
//n1:type=S"q1:String*">ABCD</licenseNumber>
//   </Vehicle>
//<Vehicle id=S"id3" n1:type=S"Vehicle" 
//xmlns:n1=S"http://www.w3.org/2001/XMLSchema-instance">
//    <licenseNumber xmlns:q1=S"http://www.w3.org/2001/XMLSchema"
 
//n1:type=S"q1:String*">1234</licenseNumber>
//  </Vehicle>
//</wrapper>
import System.*;
import System.IO.*;
import System.Text.*;
import System.Xml.*;
import System.Xml.Serialization.*;
import System.Xml.Schema.*;
// You must use the SoapIncludeAttribute to inform the XmlSerializer
// that the Vehicle type should be recognized when deserializing.
/** @attribute SoapInclude(Vehicle.class)
 */
public class Group
{
    public String groupName;
    public Vehicle groupVehicle;
} //Group

/** @attribute SoapInclude(Vehicle.class)
 */
public class Vehicle
{
    public String licenseNumber;
} //Vehicle

public class Run
{
    public static void main(String[]
 args)
    {
        Run test = new Run();
        test.DeserializeObject("UnrefObj.xml");
    } //main

    public void DeserializeObject(String fileName)
    {
        // Create an instance of the XmlSerializer class.
        XmlTypeMapping myMapping = (new SoapReflectionImporter()).
            ImportTypeMapping(Group.class.ToType());

        XmlSerializer mySerializer = new XmlSerializer(myMapping);

        mySerializer.add_UnreferencedObject(new UnreferencedObjectEventHandler(
            Serializer_UnreferencedObject));
        // Reading the file requires an  XmlTextReader.
        XmlTextReader reader = new XmlTextReader(fileName);
        reader.ReadStartElement();
        // Deserialize and cast the object.
        Group myGroup;
        myGroup = (Group)mySerializer.Deserialize(reader);
        reader.ReadEndElement();
        reader.Close();
    } //DeserializeObject

    private void Serializer_UnreferencedObject(Object
 sender,
        UnreferencedObjectEventArgs e)
    {
        Console.WriteLine("UnreferencedObject:");
        Console.WriteLine("ID: " + e.get_UnreferencedId());
        Console.WriteLine("UnreferencedObject: " + e.get_UnreferencedObject());
        Vehicle myVehicle = (Vehicle)e.get_UnreferencedObject();
        Console.WriteLine("License: " + myVehicle.licenseNumber);
    } //Serializer_UnreferencedObject
} //Run

// The file named "UnrefObj.xml" should contain this XML:
// <wrapper>
//  <Group xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 
//xmlns:xsd="http://www.w3.org/2001/XMLSchema" id="id1"
 
//n1:groupName=".NET" xmlns:n1="http://www.cpandl.com">
//   </Group>
//<Vehicle id="id2" n1:type="Vehicle" 
//xmlns:n1="http://www.w3.org/2001/XMLSchema-instance">
//   <licenseNumber xmlns:q1="http://www.w3.org/2001/XMLSchema"
 
//n1:type="q1:string">ABCD</licenseNumber>
//   </Vehicle>
//<Vehicle id="id3" n1:type="Vehicle" 
//xmlns:n1="http://www.w3.org/2001/XMLSchema-instance">
//    <licenseNumber xmlns:q1="http://www.w3.org/2001/XMLSchema"
 
//n1:type="q1:string">1234</licenseNumber>
//  </Vehicle>
//</wrapper>
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

XmlSerializer.UnreferencedObject イベントのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



XmlSerializer.UnreferencedObject イベントのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2025 Microsoft.All rights reserved.

©2025 GRAS Group, Inc.RSS