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);
            }
        }
相關文章
相關標籤/搜索