问题标签 [serializableattribute]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
3675 浏览

c# - C# 泛型方法作为带有 where 子句的扩展

我想创建一个只能为 Serializable 类运行的扩展。有没有这样的代码:

0 投票
1 回答
437 浏览

c# - DataContractSerializer 使用 SerializableAttribute 的意外行为

我正在尝试使用DataContractSerializer来序列化一个简单的对象:

我进行了广泛的研究并发现,根据 MSDN,与普遍的看法相反,该属性[DataContract]是可选的,如果没有在类上指定任何属性,则所有公共读/写属性和字段都会被序列化。事实上,当我这样序列化它时 - 它按预期工作。

现在,如果我还在[Serializable]类上添加一个属性,我会得到一个不同的序列化,它包含臭名昭著的前缀“k__BackingField”(因为我的属性是一个自动属性)。

我的问题:

  1. 谁能解释为什么DataContractSerializer 在有和没有 [Serializable] 属性的情况下会有不同的行为?不是技术解释(可能类似于“在这种情况下 XmlObjectSerializer 的基类正在接管”),而是设计原因。我看不出这种不同的序列化有何用处。如果有的话 - 它会破坏向后兼容性。建议改变微软有意义吗?
  2. 如果我不想检查整个庞大的数据模型并用 [DataContract] 和 [DataMember] 装饰所有内容 - 是否有更通用的方法来告诉 DataContractSerializer 或 WCF 基础架构(通过服务合同属性等) ,以序列化在其默认(读取:未修饰)行为中标记为 [Serializable] 的类?不幸的是,属性 [XmlSerializerFormat] 对我来说不是一个选项,我需要坚持使用 WCF 的 DataContractSerializer。
0 投票
0 回答
1430 浏览

c# - 如何使程序集中的所有 C# 类可序列化

有没有一种简单的方法可以使程序集中的所有类都可序列化,而不是[Serializable]手动放在每个类的顶部?

我不能使用反射,因为属性是静态元数据,不能动态添加,我不知道如何实现这一点。

为什么

我正在编写一个安全库,它反复检查其类的状态并抛出MemoryInjectionException一个类是否已被任何外部修改修改。为了实现这一点,我序列化所有类并将它们序列化的哈希值保存在字典中。

编辑:最终使用了SharpSerializer 的自我修改版本