本文整理汇总了C#中System.Runtime.Serialization.SurrogateSelector类的典型用法代码示例。如果您正苦于以下问题:C# SurrogateSelector类的具体用法?C# SurrogateSelector怎么用?C# SurrogateSelector使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
SurrogateSelector类属于System.Runtime.Serialization命名空间,在下文中一共展示了SurrogateSelector类的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Employee
//引入命名空间
using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters;
using System.Runtime.Serialization.Formatters.Binary;
// This class is not serializable.
class Employee
{
public String name, address;
public Employee(String name, String address)
{
this.name = name;
this.address = address;
}
}
// This class can manually serialize an Employee object.
sealed class EmployeeSerializationSurrogate : ISerializationSurrogate
{
// Serialize the Employee object to save the object's name and address fields.
public void GetObjectData(Object obj,
SerializationInfo info, StreamingContext context)
{
var emp = (Employee) obj;
info.AddValue("name", emp.name);
info.AddValue("address", emp.address);
}
// Deserialize the Employee object to set the object's name and address fields.
public Object SetObjectData(Object obj,
SerializationInfo info, StreamingContext context,
ISurrogateSelector selector)
{
var emp = (Employee) obj;
emp.name = info.GetString("name");
emp.address = info.GetString("address");
return emp;
}
}
public sealed class App
{
static void Main()
{
// This sample uses the BinaryFormatter.
IFormatter formatter = new BinaryFormatter();
// Create a MemoryStream that the object will be serialized into and deserialized from.
using (Stream stream = new MemoryStream())
{
// Create a SurrogateSelector.
var ss = new SurrogateSelector();
// Tell the SurrogateSelector that Employee objects are serialized and deserialized
// using the EmployeeSerializationSurrogate object.
ss.AddSurrogate(typeof(Employee),
new StreamingContext(StreamingContextStates.All),
new EmployeeSerializationSurrogate());
// Associate the SurrogateSelector with the BinaryFormatter.
formatter.SurrogateSelector = ss;
try
{
// Serialize an Employee object into the memory stream.
formatter.Serialize(stream, new Employee("Jeff", "1 Microsoft Way"));
}
catch (SerializationException e)
{
Console.WriteLine("Serialization failed: {0}", e.Message);
throw;
}
// Rewind the MemoryStream.
stream.Position = 0;
try
{
// Deserialize the Employee object from the memory stream.
var emp = (Employee) formatter.Deserialize(stream);
// Verify that it all worked.
Console.WriteLine("Name = {0}, Address = {1}", emp.name, emp.address);
}
catch (SerializationException e)
{
Console.WriteLine("Deserialization failed: {0}", e.Message);
throw;
}
}
}
}
输出:
Name = Jeff, Address = 1 Microsoft Way