加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 在桌面上进行序列化,在Silverlight中进行反序列化

发布时间:2020-12-16 01:42:29 所属栏目:百科 来源:网络整理
导读:我正在尝试通过一个小型C#桌面应用程序创建内容,并将其显示在Silverlight应用程序中. (我正在创建普通的普通C#对象,并试图使它们容易持久化.)上下文是某种游戏,我有一个桌面工具,可以让我创建和编辑我想要的内容,然后是Silverlight二进制消耗它. 如何在(桌面
我正在尝试通过一个小型C#桌面应用程序创建内容,并将其显示在Silverlight应用程序中. (我正在创建普通的普通C#对象,并试图使它们容易持久化.)上下文是某种游戏,我有一个桌面工具,可以让我创建和编辑我想要的内容,然后是Silverlight二进制消耗它.

如何在(桌面)C#中序列化某些内容并在Silverlight中对其进行反序列化?

我有一个我为序列化创建的小型库;它使用Mike Talbot’s amazing serializer用于Silverlight,以及一个简单的BinaryFormatter用于桌面.在每个平台内,这些都可以;但是跨平台,这两者显然是不相容的.

是否有可能做到这一点?我不希望通过将数据保存为文本然后解析它来恢复手动序列化,如果可能的话我不想使用嵌入式数据库.我可能有列表和其他复杂数据的列表,并且手动解析它太痛苦了.

如果不可能,我有什么替代方案?

编辑:ProtoBuf .NET看起来不错,但正如我在Marc的评论中提到的,我在我自己的库中使用了序列化程序.这意味着要求我的持久性库的用户向类添加属性以序列化它们将破坏封装.我不想那样做.

打破封装是什么意思?

我的库(Persistent Storage)的目标用户是游戏开发人员.他们将使用该库在游戏中保留信息.

因此,他们只使用PersistentStorage.dll.在内部,Persistent Storage使用序列化程序(目前,用于Silverlight的Mike Talbot和用于非Silverlight的简单二进制文件)来保存数据.

对我来说,“嘿伙计们,使用我的库,把[ProtoContract]或[Serializable]放在你的所有类上”打破了封装.这意味着用户知道我的库使用的内部,他们不应该这样.我明天可以改变序列化器,他们不应该在乎.

我知道作为一种解决方法,我可以要求他们将所有内容都归入[PersistMe]并将其作为一个简单的空属性,反过来,它扩展了我的序列化程序所需的任何属性.但我希望其他序列化程序,如Mike Talbot,不会要求使用任何归属.

解决方法

您可以尝试使用 Silverlight Serializer

来自作者的页面:

在.NET 4和Silverlight之间序列化类

您可能希望使用SilverlightSerializer在Silverlight和.NET 4之间共享对象,可能跨WCF链接.在这些情况下,最重要的事情是在Silverlight程序集中定义要共享的类,该程序集仅引用System,System.Core和mscorlib.这些是可以在两种类型的项目中使用的程序集的要求.如果你以这种方式定义你的类,那么它们可以在后端反序列化而没有问题,引用任何其他内容它将无法工作.幸运的是,您需要的大部分内容都包含在这些系统组件中!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读