写点什么

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

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

关注

评论

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

火山引擎边缘云,助力泛娱乐产业数字化转型升级

火山引擎边缘云

Qcon 云产品 火山引擎边缘云

九大亮点+六大好处,瑞云科技虚拟仿真实训平台引领教育信息化新潮流

3DCAT实时渲染

虚拟仿真 云仿真 3D实时云渲染

5月《中国数据库行业分析报告》正式发布,首发时序、实时数据库两大【全球产业图谱】

墨天轮

数据库 tdengine 时序数据库 国产数据库 实时数据库

数据结构校验得心应手:Apifox 最佳实践

Liam

程序员 开发 Apifox API 接口工具

天翼云胡志强:依靠科技创新驱动高质量发展之路

说山水

多层网关已成过去,网关多合一成潮流,网关改造正当时丨Higress 正式发布 1.0 版本

阿里巴巴云原生

阿里云 云原生 网关 Higress

又双叒叕种草了新家装风格?AI帮你家居换装

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 企业号 6 月 PK 榜

MobTech MobPush|统一推送联盟烂尾,统一推送还能实现吗

MobTech袤博科技

重磅升级|ONES Resource 资源管理解决方案

万事ONES

羽山数据SaaS平台新增供应商API自动上架功能

羽山数据

自动 自主研发 上架

巨梦征文 | 2023年第一期征文大赛| 报名请评论本文章

巨梦科技

屏幕调节亮度:Lunar pro 最新激活版下载

真大的脸盆

Mac Mac 软件 屏幕亮度调节

存储接口测试简介与测试方法

天翼云开发者社区

测试 存储

官宣!Databend 和 XSKY星辰天合达成合作

Databend

QR防伪溯源系统追溯原理是什么?

天翼云开发者社区

防伪溯源 防伪技术 QR技术

又裁员25%?!金三银四好像消失了

引迈信息

程序员 面试 低代码 金三银四

可持续发展的企业数智化底座究竟是什么样的?

用友BIP

白皮书 数智底座 数智平台 数智平台白皮书

LeetCode:2665. 计数器 II,闭包详解

Lee Chen

LeetCode

Web3 游戏团队如何在项目发布前奠定成功基础 ——以真实用户支持为核心的运营策略

Footprint Analytics

区块链游戏 NFT Web3 游戏

人脸识别图像技术的发展与挑战

数据堂

Spring Boot 启动注解分析

江南一点雨

Java spring springboot

人脸面部表情识别的原理及其应用

数据堂

ChatGPT 背后的英雄——AI芯片

天翼云开发者社区

人工智能 AI芯片

「焱融科技」获中关村国际前沿科技创新大赛·大数据与云计算领域 TOP10

焱融科技

高性能 #文件存储 #分布式存储

小米基于 Flink 的实时数仓建设实践

Apache Flink

大数据 flink 实时计算

推进产业发展健全服务体系,中国信通院数字员工评测工作正式启动

王吉伟频道

RPA 机器人流程自动化 信通院 数字员工 数字员工评测

软件测试/测试开发丨Pytest参数化用例学习笔记

测试人

程序员 软件测试 自动化测试 测试开发 pytest

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