2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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

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

关注

评论

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

OneFlow源码解析:算子指令在虚拟机中的执行

OneFlow

虚拟机 源码解析 算子

从脚本到剪辑,影像大师亲授的后期制作秘籍

博文视点Broadview

个推数据资产管理经验 | 教你打造数据质量心电图,智能检测数据“心跳”异常

个推

大数据 数据智能 数据资产管理 数据质量保障 数据异常检测

企业如何判断数据治理是否成功?

雨果

数据治理

50个Java面试必问的面试题,这里都给你整好了

千锋IT教育

快速上手,征服三种不同分布式架构调用方案

知识浅谈

分布式 8月月更

不止跑路,拯救误操作rm -rf /*的小伙儿

华为云开发者联盟

开发 配置文件 OM脚本

StoneDB 文档捉虫活动第一季

StoneDB

MySQL 数据库 开源 大数据 开源 8月月更

C++运算符重载(二)之左移运算符重载

CtrlX

c c++ 进阶 重载 8月月更

开源一夏 | mysql5.7安装部署-yum安装

zhangpfly

MySQL 开源 linux运维 #开源 8月月更

Open Office XML 格式里如何描述多段具有不同字体设置的段落

汪子熙

xml 微软 Office 8月月更 openOffice

Kyligence 通过 SOC 2 Type II 审计,以可信赖的企业级产品服务全球客户

Kyligence

国际权威鉴证标准 企业级数据分析

使用CSS实现多种Noise噪点效果

dragonir

CSS html html5 css3

GPU加速Pinterest推荐模型,参数量增加100倍,用户活跃度提高16%

OneFlow

机器学习 深度学习 gpu

制品库是什么?

雨后小溪

DevOps Artifactory 制品库 制品仓库 Packages

Gartner再次重申了“数据编织”的重要价值

雨果

数据编织

嘉为蓝鲸荣获工信部“数字技术融合创新应用解决方案”

嘉为蓝鲸

DevOps 运维 AIOPS 信创 研发

8月份DB-Engines 数据库排行榜最新战况

雨果

数据库

JWT 实现登录认证 + Token 自动续期方案

CRMEB

一起畅聊「云+操作系统」!龙蜥社区亮相阿里巴巴开源开放周,完整议程来了

OpenAnolis小助手

数据库 操作系统 龙蜥社区 阿里巴巴开源开放周 开源共享

模块九 - 设计电商秒杀系统

可视化服务编排在金融APP中的实践

京东科技开发者

可视化 BFF 金融 Obsuite

用低代码驱动IT现代化

力软低代码开发平台

是什么影响了MySQL性能?

TimeFriends

8月月更

SQL与NoSQL最终会走向融合吗?

雨果

nosql sql

2022年裁员潮,失业程序员何去何从?

千锋IT教育

Netty进阶 -- 非阻塞网络编程 实现群聊+私聊+心跳检测系统

Bug终结者

Netty 8月月更

谷歌数据中心发生“电力事故”造成 3 人受伤

雨果

数据中心 谷歌

Gitlab刚发布一项禁止使用 Windows 的公司政策

雨果

gitlab Github'

中小规模网站架构

舟停江吹雪

Linux

一文读懂NFT数字藏品为何风靡全球?

智捷云

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