写点什么

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

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

关注

评论

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

AI 技术开发口语对话机器人

北京木奇移动技术有限公司

AI技术 软件外包公司 AI口语练习

Fluss: First Impression

Apache Flink

大数据 flink 实时计算 流存储

【GreatSQL优化器-10】find_best_ref

GreatSQL

为什么软件测试开发需要智能体(AI Agent)?

测试人

软件测试

代码之美:聊聊代码整洁之道

京东零售技术

AI 技术在词汇学习系统的功能

北京木奇移动技术有限公司

英语学习 AI教育 软件外包

开年「荣誉三重奏」,融云斩获技术、产品、出海三项大奖!

融云 RongCloud

软件包提取工具Pacifist for mac激活版

小玖_苹果Mac软件

结合LangChain实现网页数据爬取

测试人

人工智能 软件测试

缓存之美——如何选择合适的本地缓存?

京东科技开发者

2025 年 AI 与数据工程领域十大趋势前瞻

Baihai IDP

程序员 AI 数据工程

Boost Efficiency with Wallys' One-Click AP Configuration

wallyslilly

IPQ6010

数字化时代下的数字化资产及其治理

京东科技开发者

数据库堡垒机是干嘛的?有什么用?怎么定义?

行云管家

网络安全 数据安全 堡垒机 数据库堡垒机

磁盘清理工具Magic Disk Cleaner for Mac激活版

小玖_苹果Mac软件

智慧公厕解决方案的定义、特点、技术核心!

光明源智慧厕所

说说天翼云大规模数据中心组网架构的优势

天翼云开发者社区

云计算 数据中心 天翼云

赛事数据这么重要,体育直播平台如何快速开发实现集成?

软件开发-梦幻运营部

夜莺监控支持 ES 日志告警了

巴辉特

夜莺监控 开源监控 日志告警 ES告警

WebGL开发医学影像识别的挑战

北京木奇移动技术有限公司

医学影像 软件外包公司 webgl开发

使用 Taro 开发鸿蒙原生应用 —— 快速上手,鸿蒙应用开发指南

京东科技开发者

防火墙软件Little Snitch for mac激活版

小玖_苹果Mac软件

StarRocks Awards 2024 年度贡献人物

StarRocks

AI 技术开发英语阅读理解系统

北京木奇移动技术有限公司

AI技术 AI教育 软件外包公司

五个等保知识点总结-行云管家

行云管家

信息安全 等保 等级保护 等保测评

人工智能与物联网:智慧城市的未来

天津汇柏科技有限公司

物联网 AI 人工智能

域名管理常见问题:IP、域名和DNS之间的区别和关系

国科云

详解GaussDB事务和并发控制机制,提升事务并发处理效率

华为云开发者联盟

数据库 并发控制 GaussDB

AI 技术在英语学习中的主要应用

北京木奇移动技术有限公司

英语学习 AI教育 软件外包公司

VMware的快照原理

天翼云开发者社区

vmware 快照

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