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);
            }
        }
相关文章
相关标签/搜索