DataContractSerializer序列化与反序列化遇到的奇怪问题

private  static  void  Serialize1( string  filename,  object  obj)
        {
             var  stream =  new  FileStream (filename,  FileMode .OpenOrCreate);
             var  serializer =  new  DataContractSerializer( typeof  (PackageManifest));
            serializer.WriteObject(stream, obj);
            stream.Close();
        }

当用以上方法,序列化一个对象后,用下面的反序列方法,发现有的文件居然不能反序列化,(PackageManifest 里面没有特殊对象,不然不会有的可以序列化,而有的不可以

  private  PackageManifest  Deserialize(  string  manifestFilePath)
        {
             try
            {
                 var  serializer =  new  DataContractSerializer ( typeof  ( PackageManifest  ));
                 var  stream =  new  FileStream (manifestFilePath,  FileMode .Open,  FileAccess  .Read);
                 var  manifestObject = serializer.ReadObject(stream)  as  PackageManifest ;
                stream.Close();
                 return  manifestObject;
            }
             catch  (  Exception  ex)
            {
                 return  null ;
            }
        }

然而,当我用格式化工具,将Serialize1序列化的对象格式化后,再来调用反序列化居然又可以了。 于是找到一个办法,Serialize的时候直接输出格式化的xml就没有问题了。


private  static  void  Serialize2( string  filename,  object  obj)
        {
             var  ds =  new  DataContractSerializer ( typeof  ( PackageManifest  ));
             var  settings =  new  XmlWriterSettings  { Indent =  true  };
             using  (  var  writer =  XmlWriter .Create(filename, settings))
            {
                ds.WriteObject(writer, obj);
            }
        }

转载于:https://www.cnblogs.com/jackhuclan/p/4024707.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值