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)
- Source:
- XmlSerializer.cs
- Source:
- XmlSerializer.cs
- Source:
- XmlSerializer.cs
反序列化指定 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 序列化简介
- 如何:指定 XML 流的替代元素名称
- 使用属性控制 XML 序列化
- XML 序列化示例
- XML 架构定义工具 (Xsd.exe)
适用于
Deserialize(TextReader)
- Source:
- XmlSerializer.cs
- Source:
- XmlSerializer.cs
- Source:
- XmlSerializer.cs
反序列化指定 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
包含要反序列化的 XML 文档的 TextReader。
返回
正被反序列化的 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 序列化简介
- 如何:指定 XML 流的替代元素名称
- 使用属性控制 XML 序列化
- XML 序列化示例
- XML 架构定义工具 (Xsd.exe)
适用于
Deserialize(XmlSerializationReader)
- Source:
- XmlSerializer.cs
- Source:
- XmlSerializer.cs
- Source:
- XmlSerializer.cs
反序列化指定 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
包含要反序列化的 XML 文档的 XmlSerializationReader。
返回
已反序列化的对象。
例外
当未在子类中重写该方法时,为访问该方法进行的任何尝试。
适用于
Deserialize(XmlReader)
- Source:
- XmlSerializer.cs
- Source:
- XmlSerializer.cs
- Source:
- XmlSerializer.cs
反序列化指定 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 序列化简介
- 如何:指定 XML 流的替代元素名称
- 使用属性控制 XML 序列化
- XML 序列化示例
- XML 架构定义工具 (Xsd.exe)
适用于
Deserialize(XmlReader, String)
- Source:
- XmlSerializer.cs
- Source:
- XmlSerializer.cs
- Source:
- XmlSerializer.cs
反序列化指定 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 必须使用正在反序列化的对象的类型构造 。
encodingStyle
对于 SOAP 版本 1.1 编码,将 参数设置为“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 序列化简介
- 如何:指定 XML 流的替代元素名称
- 使用属性控制 XML 序列化
- XML 序列化示例
- XML 架构定义工具 (Xsd.exe)
适用于
Deserialize(XmlReader, XmlDeserializationEvents)
- Source:
- XmlSerializer.cs
- Source:
- XmlSerializer.cs
- Source:
- XmlSerializer.cs
反序列化一个由指定的 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)
- Source:
- XmlSerializer.cs
- Source:
- XmlSerializer.cs
- Source:
- XmlSerializer.cs
使用指定的 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 服务方法中的事件同步。