XmlSerializer.Deserialize 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
還原序列化 XML 文件。
多載
Deserialize(Stream) |
還原序列化指定 Stream 所包含的 XML 文件。 |
Deserialize(TextReader) |
還原序列化指定 TextReader 所包含的 XML 文件。 |
Deserialize(XmlSerializationReader) |
還原序列化指定 XmlSerializationReader 所包含的 XML 文件。 |
Deserialize(XmlReader) |
還原序列化指定 XmlReader 所包含的 XML 文件。 |
Deserialize(XmlReader, String) |
還原序列化指定 XmlReader 和編碼樣式所包含的 XML 文件。 |
Deserialize(XmlReader, XmlDeserializationEvents) |
還原序列化指定 XmlReader 包含的 XML 文件,並允許覆寫還原序列化期間發生的事件。 |
Deserialize(XmlReader, String, XmlDeserializationEvents) |
使用指定 XmlReader 包含的資料,還原序列化物件。 |
Deserialize(Stream)
還原序列化指定 Stream 所包含的 XML 文件。
public:
System::Object ^ Deserialize(System::IO::Stream ^ stream);
public object Deserialize (System.IO.Stream stream);
public object? Deserialize (System.IO.Stream stream);
member this.Deserialize : System.IO.Stream -> obj
Public Function Deserialize (stream As Stream) As Object
參數
傳回
要進行還原序列化的 Object。
範例
下列範例會使用 Stream 物件還原序列化 物件。
#using <System.Xml.dll>
#using <System.dll>
using namespace System;
using namespace System::IO;
using namespace System::Xml::Serialization;
// This is the class that will be deserialized.
public ref class OrderedItem
{
public:
[XmlElement(Namespace="http://www.cpandl.com")]
String^ ItemName;
[XmlElement(Namespace="http://www.cpandl.com")]
String^ Description;
[XmlElement(Namespace="http://www.cohowinery.com")]
Decimal UnitPrice;
[XmlElement(Namespace="http://www.cpandl.com")]
int Quantity;
[XmlElement(Namespace="http://www.cohowinery.com")]
Decimal LineTotal;
// A custom method used to calculate price per item.
void Calculate()
{
LineTotal = UnitPrice * Quantity;
}
};
void DeserializeObject(String^ filename)
{
Console::WriteLine("Reading with Stream");
// Create an instance of the XmlSerializer.
XmlSerializer^ serializer = gcnew XmlSerializer(OrderedItem::typeid);
// Declare an object variable of the type to be deserialized.
OrderedItem^ i;
// Reading the XML document requires a FileStream.
Stream^ reader = gcnew FileStream(filename, FileMode::Open);
try
{
// Call the Deserialize method to restore the object's state.
i = dynamic_cast<OrderedItem^>(serializer->Deserialize(reader));
}
finally
{
delete reader;
}
// Write out the properties of the object.
Console::Write("{0}\t{1}\t{2}\t{3}\t{4}", i->ItemName, i->Description, i->UnitPrice, i->Quantity, i->LineTotal);
}
int main()
{
// Read a purchase order.
DeserializeObject( "simple.xml" );
}
using System;
using System.IO;
using System.Xml.Serialization;
// This is the class that will be deserialized.
public class OrderedItem
{
[XmlElement(Namespace = "http://www.cpandl.com")]
public string ItemName;
[XmlElement(Namespace = "http://www.cpandl.com")]
public string Description;
[XmlElement(Namespace="http://www.cohowinery.com")]
public decimal UnitPrice;
[XmlElement(Namespace = "http://www.cpandl.com")]
public int Quantity;
[XmlElement(Namespace="http://www.cohowinery.com")]
public decimal LineTotal;
// A custom method used to calculate price per item.
public void Calculate()
{
LineTotal = UnitPrice * Quantity;
}
}
public class Test
{
public static void Main()
{
Test t = new Test();
// Read a purchase order.
t.DeserializeObject("simple.xml");
}
private void DeserializeObject(string filename)
{
Console.WriteLine("Reading with Stream");
// Create an instance of the XmlSerializer.
XmlSerializer serializer =
new XmlSerializer(typeof(OrderedItem));
// Declare an object variable of the type to be deserialized.
OrderedItem i;
using (Stream reader = new FileStream(filename, FileMode.Open))
{
// Call the Deserialize method to restore the object's state.
i = (OrderedItem)serializer.Deserialize(reader);
}
// Write out the properties of the object.
Console.Write(
i.ItemName + "\t" +
i.Description + "\t" +
i.UnitPrice + "\t" +
i.Quantity + "\t" +
i.LineTotal);
}
}
Imports System.IO
Imports System.Xml.Serialization
' This is the class that will be deserialized.
Public Class OrderedItem
<XmlElement(Namespace := "http://www.cpandl.com")> _
Public ItemName As String
<XmlElement(Namespace := "http://www.cpandl.com")> _
Public Description As String
<XmlElement(Namespace := "http://www.cohowinery.com")> _
Public UnitPrice As Decimal
<XmlElement(Namespace := "http://www.cpandl.com")> _
Public Quantity As Integer
<XmlElement(Namespace := "http://www.cohowinery.com")> _
Public LineTotal As Decimal
'A custom method used to calculate price per item.
Public Sub Calculate()
LineTotal = UnitPrice * Quantity
End Sub
End Class
Public Class Test
Public Shared Sub Main()
Dim t As New Test()
' Read a purchase order.
t.DeserializeObject("simple.xml")
End Sub
Private Sub DeserializeObject(ByVal filename As String)
Console.WriteLine("Reading with Stream")
' Create an instance of the XmlSerializer.
Dim serializer As New XmlSerializer(GetType(OrderedItem))
' Declare an object variable of the type to be deserialized.
Dim i As OrderedItem
Using reader As New Filestream(filename, FileMode.Open)
' Call the Deserialize method to restore the object's state.
i = CType(serializer.Deserialize(reader), OrderedItem)
End Using
' Write out the properties of the object.
Console.Write(i.ItemName & ControlChars.Tab & _
i.Description & ControlChars.Tab & _
i.UnitPrice & ControlChars.Tab & _
i.Quantity & ControlChars.Tab & _
i.LineTotal)
End Sub
End Class
<?xml version="1.0"?>
<OrderedItem xmlns:inventory="http://www.cpandl.com" xmlns:money="http://www.cohowinery.com">
<inventory:ItemName>Widget</inventory:ItemName>
<inventory:Description>Regular Widget</inventory:Description>
<money:UnitPrice>2.3</money:UnitPrice>
<inventory:Quantity>10</inventory:Quantity>
<money:LineTotal>23</money:LineTotal>
</OrderedItem>
備註
還原序列化是讀取 XML 檔,並建構強型別至檔之 XML 架構 (XSD) 的物件的程式。
還原序列化之前, XmlSerializer 必須使用還原序列化之物件的型別來建構 。
stream
使用 參數來指定衍生自 Stream 類別的物件,其設計目的是要寫入資料流程。 衍生自 類別的 Stream 類別包括:
注意
XmlSerializer無法還原序列化下列專案:的 ArrayList 陣列和 的 List<T> 陣列。
另請參閱
- XmlAttributes
- CanDeserialize(XmlReader)
- Serialize(TextWriter, Object)
- XML 序列化簡介
- HOW TO:指定 XML 資料流的替代元素名稱
- 使用屬性控制 XML 序列化
- XML 序列化的範例
- XML 架構定義工具 (Xsd.exe)
適用於
Deserialize(TextReader)
還原序列化指定 TextReader 所包含的 XML 文件。
public:
System::Object ^ Deserialize(System::IO::TextReader ^ textReader);
public object Deserialize (System.IO.TextReader textReader);
public object? Deserialize (System.IO.TextReader textReader);
member this.Deserialize : System.IO.TextReader -> obj
Public Function Deserialize (textReader As TextReader) As Object
參數
- textReader
- TextReader
TextReader,包含要還原序列化的 XML 文件。
傳回
要進行還原序列化的 Object。
例外狀況
在還原序列化期間發生錯誤。 可以使用 InnerException 屬性取得原始例外狀況。
範例
下列範例會使用 TextReader 物件還原序列化 物件。
#using <System.Xml.dll>
#using <System.dll>
using namespace System;
using namespace System::IO;
using namespace System::Text;
using namespace System::Xml::Serialization;
// This is the class that will be deserialized.
public ref class OrderedItem
{
public:
String^ ItemName;
String^ Description;
Decimal UnitPrice;
int Quantity;
Decimal LineTotal;
// A custom method used to calculate price per item.
void Calculate()
{
LineTotal = UnitPrice * Quantity;
}
};
void DeserializeObject( String^ filename )
{
Console::WriteLine( "Reading with TextReader" );
// Create an instance of the XmlSerializer specifying type.
XmlSerializer^ serializer = gcnew XmlSerializer( OrderedItem::typeid );
/* Create a TextReader to read the file. Specify an
Encoding to use. */
TextReader^ reader = gcnew StreamReader( filename,Encoding::Unicode );
// Declare an object variable of the type to be deserialized.
OrderedItem^ i;
// Use the Deserialize method to restore the object's state.
i = dynamic_cast<OrderedItem^>(serializer->Deserialize( reader ));
// Write out the properties of the object.
Console::Write( "{0}\t{1}\t{2}\t{3}\t{4}", i->ItemName, i->Description, i->UnitPrice, i->Quantity, i->LineTotal );
}
int main()
{
// Read a purchase order.
DeserializeObject( "simple.xml" );
}
using System;
using System.IO;
using System.Text;
using System.Xml.Serialization;
// This is the class that will be deserialized.
public class OrderedItem
{
[XmlElement(Namespace = "http://www.cpandl.com")]
public string ItemName;
[XmlElement(Namespace = "http://www.cpandl.com")]
public string Description;
[XmlElement(Namespace = "http://www.cohowinery.com")]
public decimal UnitPrice;
[XmlElement(Namespace = "http://www.cpandl.com")]
public int Quantity;
[XmlElement(Namespace = "http://www.cohowinery.com")]
public decimal LineTotal;
// A custom method used to calculate price per item.
public void Calculate()
{
LineTotal = UnitPrice * Quantity;
}
}
public class Test
{
public static void Main()
{
Test t = new Test();
// Read a purchase order.
t.DeserializeObject("simple.xml");
}
private void DeserializeObject(string filename)
{
Console.WriteLine("Reading with TextReader");
// Create an instance of the XmlSerializer specifying type.
XmlSerializer serializer =
new XmlSerializer(typeof(OrderedItem));
// Create a TextReader to read the file.
FileStream fs = new FileStream(filename, FileMode.OpenOrCreate);
TextReader reader = new StreamReader(fs);
// Declare an object variable of the type to be deserialized.
OrderedItem i;
// Use the Deserialize method to restore the object's state.
i = (OrderedItem) serializer.Deserialize(reader);
// Write out the properties of the object.
Console.Write(
i.ItemName + "\t" +
i.Description + "\t" +
i.UnitPrice + "\t" +
i.Quantity + "\t" +
i.LineTotal);
}
}
Imports System.IO
Imports System.Text
Imports System.Xml.Serialization
' This is the class that will be deserialized.
Public Class OrderedItem
<XmlElement(Namespace := "http://www.cpandl.com")> _
Public ItemName As String
<XmlElement(Namespace := "http://www.cpandl.com")> _
Public Description As String
<XmlElement(Namespace := "http://www.cohowinery.com")> _
Public UnitPrice As Decimal
<XmlElement(Namespace := "http://www.cpandl.com")> _
Public Quantity As Integer
<XmlElement(Namespace := "http://www.cohowinery.com")> _
Public LineTotal As Decimal
' A custom method used to calculate price per item.
Public Sub Calculate()
LineTotal = UnitPrice * Quantity
End Sub
End Class
Public Class Test
Public Shared Sub Main()
Dim t As New Test()
' Read a purchase order.
t.DeserializeObject("simple.xml")
End Sub
Private Sub DeserializeObject(filename As String)
Console.WriteLine("Reading with TextReader")
' Create an instance of the XmlSerializer specifying type.
Dim serializer As New XmlSerializer(GetType(OrderedItem))
' Create a TextReader to read the file.
Dim fs as New FileStream(filename, FileMode.OpenOrCreate)
Dim reader As New StreamReader(fs)
' Declare an object variable of the type to be deserialized.
Dim i As OrderedItem
' Use the Deserialize method to restore the object's state.
i = CType(serializer.Deserialize(reader), OrderedItem)
' Write out the properties of the object.
Console.Write(i.ItemName & ControlChars.Tab & _
i.Description & ControlChars.Tab & _
i.UnitPrice & ControlChars.Tab & _
i.Quantity & ControlChars.Tab & _
i.LineTotal)
End Sub
End Class
備註
還原序列化是讀取 XML 檔的實例,並建構強型別至檔之 XML 架構 (XSD) 的物件的程式。
還原序列化之前, XmlSerializer 必須使用還原序列化之物件的型別來建構 。
繼承自 TextReader 的類別包括 StringReader 和 StreamReader 。 如果您使用 StreamReader 還原序列化物件,則必須使用適當的 Encoding 來建構 StreamReader 。 會忽略 XML 檔所指定的編碼方式。
注意
若要使用 XML 檔所指定的編碼方式,請 Deserialize 改用 採用 XmlReader 的多載。 會自動 XmlReader 偵測並使用 XML 檔所指定的編碼方式。
注意
XmlSerializer無法還原序列化下列專案:的 ArrayList 陣列和 的 List<T> 陣列。
另請參閱
- XmlAttributes
- CanDeserialize(XmlReader)
- Serialize(TextWriter, Object)
- XML 序列化簡介
- HOW TO:指定 XML 資料流的替代元素名稱
- 使用屬性控制 XML 序列化
- XML 序列化的範例
- XML 架構定義工具 (Xsd.exe)
適用於
Deserialize(XmlSerializationReader)
還原序列化指定 XmlSerializationReader 所包含的 XML 文件。
protected:
virtual System::Object ^ Deserialize(System::Xml::Serialization::XmlSerializationReader ^ reader);
protected virtual object Deserialize (System.Xml.Serialization.XmlSerializationReader reader);
abstract member Deserialize : System.Xml.Serialization.XmlSerializationReader -> obj
override this.Deserialize : System.Xml.Serialization.XmlSerializationReader -> obj
Protected Overridable Function Deserialize (reader As XmlSerializationReader) As Object
參數
- reader
- XmlSerializationReader
XmlSerializationReader,包含要還原序列化的 XML 文件。
傳回
已還原序列化的物件。
例外狀況
當方法在子代類別中未覆寫時,會嘗試存取該方法。
適用於
Deserialize(XmlReader)
還原序列化指定 XmlReader 所包含的 XML 文件。
public:
System::Object ^ Deserialize(System::Xml::XmlReader ^ xmlReader);
public object Deserialize (System.Xml.XmlReader xmlReader);
public object? Deserialize (System.Xml.XmlReader xmlReader);
member this.Deserialize : System.Xml.XmlReader -> obj
Public Function Deserialize (xmlReader As XmlReader) As Object
參數
傳回
要進行還原序列化的 Object。
例外狀況
在還原序列化期間發生錯誤。 可以使用 InnerException 屬性取得原始例外狀況。
範例
下列範例會使用 XmlReader 還原序列化 物件。
#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;
// This is the class that will be deserialized.
public ref class OrderedItem
{
public:
String^ ItemName;
String^ Description;
Decimal UnitPrice;
int Quantity;
Decimal LineTotal;
// A custom method used to calculate price per item.
void Calculate()
{
LineTotal = UnitPrice * Quantity;
}
};
void DeserializeObject( String^ filename )
{
Console::WriteLine( "Reading with XmlReader" );
// Create an instance of the XmlSerializer specifying type and namespace.
XmlSerializer^ serializer = gcnew XmlSerializer( OrderedItem::typeid );
// A FileStream is needed to read the XML document.
FileStream^ fs = gcnew FileStream( filename,FileMode::Open );
XmlReader^ reader = gcnew XmlTextReader( fs );
// Declare an object variable of the type to be deserialized.
OrderedItem^ i;
// Use the Deserialize method to restore the object's state.
i = dynamic_cast<OrderedItem^>(serializer->Deserialize( reader ));
// Write out the properties of the object.
Console::Write( "{0}\t{1}\t{2}\t{3}\t{4}", i->ItemName, i->Description, i->UnitPrice, i->Quantity, i->LineTotal );
}
int main()
{
// Read a purchase order.
DeserializeObject( "simple.xml" );
}
using System;
using System.IO;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
// This is the class that will be deserialized.
public class OrderedItem
{
public string ItemName;
public string Description;
public decimal UnitPrice;
public int Quantity;
public decimal LineTotal;
// A custom method used to calculate price per item.
public void Calculate()
{
LineTotal = UnitPrice * Quantity;
}
}
public class Test
{
public static void Main(string[] args)
{
Test t = new Test();
// Read a purchase order.
t.DeserializeObject("simple.xml");
}
private void DeserializeObject(string filename)
{
Console.WriteLine("Reading with XmlReader");
// Create an instance of the XmlSerializer specifying type and namespace.
XmlSerializer serializer = new
XmlSerializer(typeof(OrderedItem));
// A FileStream is needed to read the XML document.
FileStream fs = new FileStream(filename, FileMode.Open);
XmlReader reader = XmlReader.Create(fs);
// Declare an object variable of the type to be deserialized.
OrderedItem i;
// Use the Deserialize method to restore the object's state.
i = (OrderedItem)serializer.Deserialize(reader);
fs.Close();
// Write out the properties of the object.
Console.Write(
i.ItemName + "\t" +
i.Description + "\t" +
i.UnitPrice + "\t" +
i.Quantity + "\t" +
i.LineTotal);
}
}
Imports System.IO
Imports System.Text
Imports System.Xml
Imports System.Xml.Serialization
' This is the class that will be deserialized.
Public Class OrderedItem
Public ItemName As String
Public Description As String
Public UnitPrice As Decimal
Public Quantity As Integer
Public LineTotal As Decimal
' A custom method used to calculate price per item.
Public Sub Calculate()
LineTotal = UnitPrice * Quantity
End Sub
End Class
Public Class Test
Public Shared Sub Main()
Dim t As New Test()
' Read a purchase order.
t.DeserializeObject("simple.xml")
End Sub
Private Sub DeserializeObject(ByVal filename As String)
Console.WriteLine("Reading with XmlReader")
' Create an instance of the XmlSerializer specifying type and namespace.
Dim serializer As New XmlSerializer(GetType(OrderedItem))
' A FileStream is needed to read the XML document.
Dim fs As New FileStream(filename, FileMode.Open)
Dim reader As XmlReader = XmlReader.Create(fs)
' Declare an object variable of the type to be deserialized.
Dim i As OrderedItem
' Use the Deserialize method to restore the object's state.
i = CType(serializer.Deserialize(reader), OrderedItem)
fs.Close()
' Write out the properties of the object.
Console.Write(i.ItemName & ControlChars.Tab & _
i.Description & ControlChars.Tab & _
i.UnitPrice & ControlChars.Tab & _
i.Quantity & ControlChars.Tab & _
i.LineTotal)
End Sub
End Class
<?xml version="1.0"?>
<OrderedItem xmlns:inventory="http://www.cpandl.com" xmlns:money="http://www.cohowinery.com">
<inventory:ItemName>Widget</inventory:ItemName>
<inventory:Description>Regular Widget</inventory:Description>
<money:UnitPrice>2.3</money:UnitPrice>
<inventory:Quantity>10</inventory:Quantity>
<money:LineTotal>23</money:LineTotal>
</OrderedItem>
備註
還原序列化是讀取 XML 檔的實例,並建構強型別至檔之 XML 架構 (XSD) 的物件的程式。
還原序列化之前, XmlSerializer 必須使用還原序列化之物件的型別來建構 。
會自動 XmlReader 偵測並使用 XML 檔所指定的編碼方式。
注意
XmlSerializer無法還原序列化下列專案:的 ArrayList 陣列和 的 List<T> 陣列。
另請參閱
- XmlAttributes
- CanDeserialize(XmlReader)
- Serialize(TextWriter, Object)
- XML 序列化簡介
- HOW TO:指定 XML 資料流的替代元素名稱
- 使用屬性控制 XML 序列化
- XML 序列化的範例
- XML 架構定義工具 (Xsd.exe)
適用於
Deserialize(XmlReader, String)
還原序列化指定 XmlReader 和編碼樣式所包含的 XML 文件。
public:
System::Object ^ Deserialize(System::Xml::XmlReader ^ xmlReader, System::String ^ encodingStyle);
public object? Deserialize (System.Xml.XmlReader xmlReader, string? encodingStyle);
public object Deserialize (System.Xml.XmlReader xmlReader, string encodingStyle);
member this.Deserialize : System.Xml.XmlReader * string -> obj
Public Function Deserialize (xmlReader As XmlReader, encodingStyle As String) As Object
參數
- encodingStyle
- String
序列化 XML 的編碼樣式。
傳回
已還原序列化的物件。
例外狀況
在還原序列化期間發生錯誤。 可以使用 InnerException 屬性取得原始例外狀況。
備註
還原序列化是讀取 XML 檔的實例,並建構強型別至檔之 XML 架構 (XSD) 的物件的程式。
還原序列化之前, XmlSerializer 必須使用還原序列化之物件的型別來建構 。
將 SOAP 1.1 版編碼的參數 encodingStyle
設定為 「 http://schemas.xmlsoap.org/soap/encoding/ 」;否則,請將 SOAP 1.2 版編碼的 參數設定為 「 http://www.w3.org/2001/12/soap-encoding 」。
注意XmlSerializer無法還原序列化下列專案:的 ArrayList 陣列和 的 List<T> 陣列。
另請參閱
- XmlAttributes
- CanDeserialize(XmlReader)
- Serialize(TextWriter, Object)
- XML 序列化簡介
- HOW TO:指定 XML 資料流的替代元素名稱
- 使用屬性控制 XML 序列化
- XML 序列化的範例
- XML 架構定義工具 (Xsd.exe)
適用於
Deserialize(XmlReader, XmlDeserializationEvents)
還原序列化指定 XmlReader 包含的 XML 文件,並允許覆寫還原序列化期間發生的事件。
public:
System::Object ^ Deserialize(System::Xml::XmlReader ^ xmlReader, System::Xml::Serialization::XmlDeserializationEvents events);
public object? Deserialize (System.Xml.XmlReader xmlReader, System.Xml.Serialization.XmlDeserializationEvents events);
public object Deserialize (System.Xml.XmlReader xmlReader, System.Xml.Serialization.XmlDeserializationEvents events);
member this.Deserialize : System.Xml.XmlReader * System.Xml.Serialization.XmlDeserializationEvents -> obj
Public Function Deserialize (xmlReader As XmlReader, events As XmlDeserializationEvents) As Object
參數
- events
- XmlDeserializationEvents
XmlDeserializationEvents 類別的執行個體。
傳回
要進行還原序列化的 Object。
備註
正在還原序列化的物件。
適用於
Deserialize(XmlReader, String, XmlDeserializationEvents)
使用指定 XmlReader 包含的資料,還原序列化物件。
public:
System::Object ^ Deserialize(System::Xml::XmlReader ^ xmlReader, System::String ^ encodingStyle, System::Xml::Serialization::XmlDeserializationEvents events);
public object? Deserialize (System.Xml.XmlReader xmlReader, string? encodingStyle, System.Xml.Serialization.XmlDeserializationEvents events);
public object Deserialize (System.Xml.XmlReader xmlReader, string encodingStyle, System.Xml.Serialization.XmlDeserializationEvents events);
member this.Deserialize : System.Xml.XmlReader * string * System.Xml.Serialization.XmlDeserializationEvents -> obj
Public Function Deserialize (xmlReader As XmlReader, encodingStyle As String, events As XmlDeserializationEvents) As Object
參數
- encodingStyle
- String
使用的編碼方式。
- events
- XmlDeserializationEvents
XmlDeserializationEvents 類別的執行個體。
傳回
正在還原序列化的物件。
備註
只有在 Web 服務案例中還原序列化未知標頭時,才需要這個方法。 這個方法可讓您避免 Web 服務方法中的事件同步處理。