写点什么

序列化 .NET 中的不可变集合

  • 2013-11-12
  • 本文字数:813 字

    阅读完需:约 3 分钟

.NET 不可变集合的序列化问题现在非常糟糕。如果你使用 DataMember 属性标记一个 ImmutableList类型的属性,那么标准的反序列化器好像会忽略它。没有运行时错误,但是数据就是不存在。

你可以将属性改为 IList 类型从而防止数据丢失,但是这会导致一个语义问题。尽管你可以将一个不可变列表存储到一个 IList 中,但是这种做法令人难以接受,因为大多数人心里面都认为一个给定的 IList 不会是只读的。另外,类型检查器不能在编译时捕获这种错误。

为了解决语义错误,用户认为可以提供一个 IReadOnlyList 类型的属性替代。不幸的是,这样做会在序列化期间抛出一个异常,除非添加了 KnownType 属性。但是一旦添加了该属性在对其序列化时就又会产生无声的错误。

同样地,传统的序列化机制(使用 Serializable 属性)也不支持。Immo Landwerth 写道:

是的。首先,我们使用的可移植子集(portable subset)不支持二进制序列化( visualstudio.uservoice.com/…/3701316-make-the-new-immutable-collection-types-serializab )。其次,我们喜欢一个能够在核心数据结构之外实现序列化的模型,因为这样在客户端 / 服务器场景下使用的时候就可以更加有弹性地实现变化、解决跨版本序列化问题。流行的序列化类库已经计划为不可变集合增加支持,例如 JSON.NET、protobuf-net。

这样我们可以选择第三方类库,例如 JSON.NET。截至版本 5.0r7, JSON.NET 已经支持.NET 官方的不可变集合类库。该版本中的新内容还包括 JsonExtensionData,它会将一个被反序列化类中的所有没有属性表示的附加数据存储起来。

Marc Gravell 还宣称 protobuf-net 将会支持不可变集合

protobuf-net (r666)的主干现在已经支持不可变列表(List)、数组(Array)、字典(Dictionary)、哈希集合(Hash-Set)、排序集合(Sorted-Set)、排序字典(Sorted-Dictionary),同时它们的所有接口都有双份。但是所有内容都在一个单例模式识别块中。

查看英文原文 Serializing Immutable Collections in .NET

2013-11-12 05:121613
用户头像

发布了 321 篇内容, 共 133.7 次阅读, 收获喜欢 19 次。

关注

评论

发布
暂无评论
发现更多内容

SQL 中的 MIN 和 MAX 以及常见函数详解及示例演示

小万哥

MySQL 数据库 sql 程序员 后端开发

PDF转Word,1行Python代码就够了,免费用

程序员晚枫

Python PDF word 自动化办公

做好数据治理,推动国有企业数据资产化加速落地!

用友BIP

数据治理 数据资产入表

提升编程效率:软件工程师必备的10个Git命令

南城FE

git 前端 软件工程 后端 代码

透过一台电视,看到万家星闪

脑极体

通信

2023-11-22:用go语言,给你一个长度为 n 下标从 0 开始的整数数组 nums。 它包含 1 到 n 的所有数字,请你返回上升四元组的数目。 如果一个四元组 (i, j, k, l) 满足

福大大架构师每日一题

福大大架构师每日一题

还在为考试重题、错题而头疼?大可不必!时习知新功能了解一下!

轶天下事

测试人员在 Scrum 中的角色是什么?

敏捷开发

项目管理 Scrum 敏捷开发 自动化测试 bug管理

协同办公零代码领先实践之企业用品管理

用友BIP

协同办公

服务器如何搭建虚拟主机

Geek_f19a80

服务器

2023中关村论坛系列活动——英特尔智能医疗健康创新合作论坛在京成功举办

E科讯

华为数字治理经验,首次披露!

轶天下事

如何打破资产盘点壁垒,用友BIP资产云来支招!

用友BIP

资产盘点

乌卡时代确定性稀缺,企业多云战略最需看中什么?

轶天下事

阿里云崩了:企业未来该怎么选择云厂商?

轶天下事

音色逼真、韵律自然的AI人声克隆限时福利!

阿里云CloudImagine

云计算 视频云

2023 CCHIO | 共襄盛会,为肿瘤防治创新发展贡献觅健力量

联营汇聚

第八期 |《实时洞察 智能运营一用友企业绩效管理白皮书》解读

用友BIP

企业绩效

让公有云服务“宁安如梦”的“定心丸”在哪里?

轶天下事

国际版Amazon Lightsail的功能解析

穿过生命散发芬芳

AWS Lightsail 轻量级服务器

前言 | AI工程化部署

AIWeker

AI AI工程化部署

序列化 .NET中的不可变集合_.NET_Jonathan Allen_InfoQ精选文章