您的位置:首页 > 其它

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

2014-10-14 16:39 387 查看
[align=left]private static void Serialize1(string filename, object obj)[/align][align=left] {[/align][align=left] var stream = new FileStream(filename, FileMode.OpenOrCreate);[/align][align=left] var serializer = new DataContractSerializer(typeof (PackageManifest));[/align][align=left] serializer.WriteObject(stream, obj);[/align][align=left] stream.Close();[/align][align=left] }[/align][align=left]
[/align][align=left]当用以上方法,序列化一个对象后,用下面的反序列方法,发现有的文件居然不能反序列化,(PackageManifest 里面没有特殊对象,不然不会有的可以序列化,而有的不可以)[/align][align=left]
[/align][align=left] private PackageManifest Deserialize( string manifestFilePath)[/align][align=left] {[/align][align=left] try[/align][align=left] {[/align][align=left] var serializer = new DataContractSerializer(typeof (PackageManifest ));[/align][align=left] var stream = new FileStream(manifestFilePath, FileMode.Open, FileAccess .Read);[/align][align=left] var manifestObject = serializer.ReadObject(stream) as PackageManifest;[/align][align=left] stream.Close();[/align][align=left] return manifestObject;[/align][align=left] }[/align][align=left] catch ( Exception ex)[/align][align=left] {[/align][align=left] return null;[/align][align=left] }[/align][align=left] }[/align][align=left]
[/align][align=left]然而,当我用格式化工具,将Serialize1序列化的对象格式化后,再来调用反序列化居然又可以了。 于是找到一个办法,Serialize的时候直接输出格式化的xml就没有问题了。[/align][align=left]
[/align][align=left]
[/align][align=left]private static void Serialize2(string filename, object obj)[/align][align=left] {[/align][align=left] var ds = new DataContractSerializer(typeof (PackageManifest ));[/align][align=left] var settings = new XmlWriterSettings { Indent = true };[/align][align=left] using ( var writer = XmlWriter.Create(filename, settings))[/align][align=left] {[/align][align=left] ds.WriteObject(writer, obj);[/align][align=left] }[/align][align=left] }[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: