保存类型如下:
<Student z:Id="1" z:Type="ClassLibrary1.Student" z:Assembly="ClassLibrary1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8879e74bfbe2761e" xmlns="http://schemas.datacontract.org/2004/07/ClassLibrary1" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/"><id>1</id><name z:Id="2">test2</name></Student>
public class Class1
{
public static void WriteToBinaryFile(object s1)
{
// Student s1 = new Student() { id = 1, name = "test1" };
using (System.IO.FileStream fs = new System.IO.FileStream(@"c:\temp\\Studdent_Binary.data", System.IO.FileMode.Create, System.IO.FileAccess.Write))
{
NetDataContractSerializer serializer = new NetDataContractSerializer();
serializer.Binder = new CustomizedBinder();
serializer.Serialize(fs, s1);
}
}
public static object ReadFromBinaryFile()
{
using (System.IO.FileStream fs = new System.IO.FileStream(@"c:\temp\Studdent_Binary.data", System.IO.FileMode.Open, System.IO.FileAccess.Read))
{
NetDataContractSerializer serializer = new NetDataContractSerializer();
serializer.Binder = new CustomizedBinder();
return serializer.Deserialize(fs);
}
}
public sealed class CustomizedBinder : SerializationBinder
{
/// <summary>
/// reader will call this method
/// </summary>
/// <param name="assemblyName"></param>
/// <param name="typeName"></param>
/// <returns></returns>
public override Type BindToType(string assemblyName, string typeName)
{
Type returntype = null;
//string sharedAssemblyName = "ClassLibrary1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8879e74bfbe2761e";
//assemblyName = Assembly.GetExecutingAssembly().FullName;
// typeName = typeName.Replace(sharedAssemblyName, assemblyName);
// typeName is full type
//dictionary<typename, assemblyName> to get its assemblyname
assemblyName = "ClassLibrary2, Version=2.0.0.0, Culture=neutral, PublicKeyToken=34d44f86d4e21737";
returntype =
Type.GetType(String.Format("{0}, {1}",
typeName, assemblyName));
return returntype;
}
/// <summary>
/// write will call this method.
/// </summary>
/// <param name="serializedType"></param>
/// <param name="assemblyName"></param>
/// <param name="typeName"></param>
public override void BindToName(Type serializedType, out string assemblyName, out string typeName)
{
base.BindToName(serializedType, out assemblyName, out typeName);
assemblyName = "ClassLibrary1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8879e74bfbe2761e";
}
}