SerializationInfo.GetValue(String, Type) 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
从 SerializationInfo 存储中检索一个值。
public:
System::Object ^ GetValue(System::String ^ name, Type ^ type);
public object? GetValue (string name, Type type);
public object GetValue (string name, Type type);
member this.GetValue : string * Type -> obj
Public Function GetValue (name As String, type As Type) As Object
参数
- name
- String
与要检索的值关联的名称。
- type
- Type
要检索的值的 Type。 如果存储的值不能转换为此类型,则系统会引发 InvalidCastException。
返回
与 name
关联的已指定 Type 的对象。
例外
name
或 type
为 null
。
与 name
关联的值不能转换为 type
。
当前实例中没有找到具有指定名称的元素。
示例
下面的代码示例演示了该方法 GetValue 的使用:
// A serializable LinkedList example. For the full LinkedList implementation
// see the Serialization sample.
[Serializable]
ref class LinkedList: public ISerializable
{
private:
Node^ m_head;
Node^ m_tail;
// Serializes the object.
public:
virtual void GetObjectData( SerializationInfo^ info, StreamingContext /*context*/ )
{
// Stores the m_head and m_tail references in the SerializationInfo info.
info->AddValue( "head", m_head, m_head->GetType() );
info->AddValue( "tail", m_tail, m_tail->GetType() );
}
// Constructor that is called automatically during deserialization.
private:
// Reconstructs the object from the information in SerializationInfo info
LinkedList( SerializationInfo^ info, StreamingContext /*context*/ )
{
Node^ temp = gcnew Node( 0 );
// Retrieves the values of Type temp.GetType() from SerializationInfo info
m_head = dynamic_cast<Node^>(info->GetValue( "head", temp->GetType() ));
m_tail = dynamic_cast<Node^>(info->GetValue( "tail", temp->GetType() ));
}
};
// A serializable LinkedList example. For the full LinkedList implementation
// see the Serialization sample.
[Serializable()]
class LinkedList: ISerializable {
public static void Main() {}
Node m_head = null;
Node m_tail = null;
// Serializes the object.
public void GetObjectData(SerializationInfo info, StreamingContext context){
// Stores the m_head and m_tail references in the SerializationInfo info.
info.AddValue("head", m_head, m_head.GetType());
info.AddValue("tail", m_tail, m_tail.GetType());
}
// Constructor that is called automatically during deserialization.
// Reconstructs the object from the information in SerializationInfo info
private LinkedList(SerializationInfo info, StreamingContext context)
{
Node temp = new Node(0);
// Retrieves the values of Type temp.GetType() from SerializationInfo info
m_head = (Node)info.GetValue("head", temp.GetType());
m_tail = (Node)info.GetValue("tail", temp.GetType());
}
}
' A serializable LinkedList example. For the full LinkedList implementation
' see the Serialization sample.
<Serializable()> Class LinkedList
Implements ISerializable
Public Shared Sub Main()
End Sub
Private m_head As Node = Nothing
Private m_tail As Node = Nothing
' Serializes the object.
Public Sub GetObjectData(info As SerializationInfo, _
context As StreamingContext) Implements ISerializable.GetObjectData
' Stores the m_head and m_tail references in the SerializationInfo info.
info.AddValue("head", m_head, m_head.GetType())
info.AddValue("tail", m_tail, m_tail.GetType())
End Sub
' Constructor that is called automatically during deserialization.
' Reconstructs the object from the information in SerializationInfo info.
Private Sub New(info As SerializationInfo, context As StreamingContext)
Dim temp As New Node(0)
' Retrieves the values of Type temp.GetType() from SerializationInfo info.
m_head = CType(info.GetValue("head", temp.GetType()), Node)
m_tail = CType(info.GetValue("tail", temp.GetType()), Node)
End Sub
End Class
注解
如果存储于 (SerializationInfo 请求的类型或其派生类之一) ,则直接返回该值。 否则, IFormatterConverter.Convert 将调用它转换为适当的类型。
方法返回 GetValue 的值始终可以安全地强制转换为参数中指定的 type
类型。