序列化不可序列化(译文)
By S.F.
本文链接 https://www.kyfws.com/news/serializing-the-unserializable/
版权声明 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
- 2 分钟阅读 - 995 个词 阅读量 0序列化不可序列化(译文)
原文地址:https://www.codeproject.com/Articles/166020/Serializing-the-Unserializable
原文作者:Joel Ivory Johnson
译文由本站翻译
前言
如何序列化不可序列化的类.
下载源代码66 KB
我在Windows Phone开发人员论坛上遇到了一个帖子,这让我想了一会儿.张贴者询问如何序列化无法序列化的类.感兴趣的类是" StrokeCollection"类.解决此问题的方法实际上已经存在了一段时间,但使用的条件有所不同.如果您读一本"设计模式"书并查找"数据传输对象"(DTO),您将看到我在说什么.为了方便那些没有"设计模式"书的人,我将介绍这个概念.
存在DTO是为了将数据存储在适合于跨越边界的对象中.很多时候,当我看到有人谈论DTO时,它是针对从应用程序到数据库的对象.但这不限于这种情况.为了回答发布者的问题,我可以假设他或她想要将数据传输到文件中.文件中数据的表示形式也是适合通过导线传输的形式.
为了完成任务,我制作了一些类,这些类具有一些(但不是全部)与序列化类相同的属性.我不需要复制所有属性,因为我对保存类提供的所有数据不感兴趣.就功能而言,我放在这些类上的唯一一件事就是将DTO转换为原始类的功能,反之亦然. StrokeCollection
类使用许多其他类来表示其数据. ``StrokeCollection
包含Stroke
的实例,其中包含StylusPoint
Collection的实例,并且包含
StylusPoint`的实例.我创建了一个类似的层次结构,该层次结构的成员标记为可序列化的(带有[DataContract]属性).为了保存和加载数据,我使用了serialization前一篇文章中的代码.使用我的类层次结构和serialization代码,我可以加载并将笔划保存在几行代码中.
//Save the Strokes
var valuesaveDto = new StrokeDtoCollection(myInkPresenter.Strokes);
_myInkSaver.SaveMyData(valuesaveDto,"MyInk.ink");
//Load the Strokes
var valueDto = _myInkSaver.LoadMyData("MyInk.ink");
myInkPresenter.Strokes = valueDto.ToStrokeCollection();
我整理了一个使用该代码的示例程序(请参见文章顶部的链接).警告,我还没有实现任何墓碑代码.但是绘制任何您喜欢的东西,然后单击"保存"按钮.从程序退出后,当您重新进入程序时,您将看到图片重新加载.
许可
本文以及所有相关的源代码和文件均已获得The Code Project Open License (CPOL)的许可。
C# .NET Mobile Dev Intermediate Windows-Phone-7 新闻 翻译