写点什么

序列化 .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:121403
用户头像

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

关注

评论

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

软件测试学习笔记丨Pytest–Fixture特点及优势

测试人

软件测试

盘点|《数据安全法》的26部配套立法(附下载)

极盾科技

数据安全

[每日秒懂] 软件工程

dinstone

DevOps 敏捷开发 软件工程 持续交付 持续部署

图扑物联赋能港口智能照明

图扑物联

工业物联网 智慧港口 智能照明 web组态软件 云组态

数据集成之任务调度模式 v0.7

LIEN

开源 数据仓库 数据集成 业务融合 API对接

海外客户获取难?海外云手机助力电商营销引流!

Ogcloud

云手机 海外云手机 云手机海外版 电商云手机 跨境云手机

解锁第五代英特尔至强的AI“秘籍”:CPU也能运行大模型推理

E科讯

从 Linux 内核角度探秘 JDK MappedByteBuffer

不在线第一只蜗牛

Linux 测试

探索Garnet:微软开源的高性能分布式缓存存储系统

gogo

解密通义灵码:软件研发工具的“大脑”

阿里巴巴云原生

阿里云 云原生

通过ETL工具快速实现单据同步

RestCloud

数据同步 ETL 数据集成

生成大边界不重复随机整数

waitmoon

伪随机函数 随机数

极盾故事|“账号在非常用IP、非工作时间频繁访问敏感数据”,某品牌咖啡是这样处理的!

极盾科技

数据库与低代码:重塑软件开发的新范式

不在线第一只蜗牛

数据库 低代码 数据可视化

提升Java编程安全性-代码加密混淆工具的重要性和应用

云原生最佳实践系列2:基于 MSE 云原生网关同城多活

阿里巴巴云原生

阿里云 云原生 云原生网关

云PBX的介绍

cts喜友科技

通信 通讯 云pbx 云通讯

2024南京国际消费电子展览会

AIOTE智博会

消费电子展会 消费电子博览会

【OCI系列】走进甲骨文云服务器:– Console

极客天地

【OCI系列】走进甲骨文云服务器:打造专属的云资源管理空间

极客天地

外贸独立站怎么搭建?

九凌网络

智启未来:TinyEngine 低代码引擎版本更新,畅享升级体验

OpenTiny社区

开源 前端 低代码 web开发

Debezium vs OGG vs Tapdata:如何实时同步 Oracle 数据到 Kafka 消息队列?

tapdata

同步 Oracle 数据到 Kafka Oracle 到 Kafka Kafka 数据同步方案 Oracle 数据同步工具

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