serialize是想改变保存到文件中的assemblyName,可以在这里修改

保存类型如下:

<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";
        }
    }
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值