惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

小众软件
小众软件
C
Check Point Blog
Vercel News
Vercel News
Y
Y Combinator Blog
G
Google Developers Blog
P
Proofpoint News Feed
WordPress大学
WordPress大学
MongoDB | Blog
MongoDB | Blog
博客园 - 司徒正美
Last Week in AI
Last Week in AI
博客园 - 【当耐特】
N
Netflix TechBlog - Medium
L
LangChain Blog
V
V2EX
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
大猫的无限游戏
大猫的无限游戏
D
DataBreaches.Net
博客园_首页
B
Blog RSS Feed
The Cloudflare Blog
MyScale Blog
MyScale Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Microsoft Security Blog
Microsoft Security Blog

博客园 - 落叶潇潇雨

Can't get WebApplicationContext object from ContextRegistry.GetContext(): Resource handler for the 'web' protocol is not defined xml序列化与反序列化 Asp.net 导出Excel How to debug Typescript in browser log4net使用的关键点 图文安装Windows Template Library - WTL Version 9.0 WCF的传输安全(读书笔记) Asp.net mvc 各个组件的分离 同程旅游网开放平台SDK开发完成 csdn回到顶端 SQL多行变一列 Timer的schedule和scheduleAtFixedRate方法的区别解析 android 主线程和子线程之间的消息传递 activity生命周期 瀑布流插件 CSS自适应宽度圆角按钮 ajaxFileUpload上传文件和表单数据 Ajax上传表单数据和文件 使用Rhino Mocks
DataContractSerializer序列化与反序列化遇到的奇怪问题
落叶潇潇雨 · 2014-10-14 · via 博客园 - 落叶潇潇雨

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);

            }

        }