【发布时间】:2016-11-21 04:47:14
【问题描述】:
我有以下代码:
[DataContract(Namespace = "removed")]
public class FootballPlayer
{
/// <summary>
/// Id of the player.
/// </summary>
[DataMember]
public int Id { get; set; }
/// <summary>
/// Name of the player.
/// </summary>
[DataMember]
public string Name { get; set; }
当我尝试填充我的 redis 缓存时,我收到以下错误:
Additional information: Type 'FootballApp.PlayerBase.Contract.FootballPlayer' in Assembly 'FootballApp.PlayerBase.Contract, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' is not marked as serializable.
我应该做些什么来告诉 Redis 接受 DataContractSerializer 作为“已接受”序列化程序(?),因为需要一个更好的术语?
我不想回到我所有的课程并标记为 [Seraliazble] - 我希望(因为它对 AppFabric 来说很好)[DataContract] 和 [DataMember] 为我做这件事......
【问题讨论】:
-
通过使用 datacontract 属性,我希望它已经是可序列化的 - 根据 DataContract 摘要 - “指定类型定义或实现数据合同并且可由序列化程序序列化,例如 System. Runtime.Serialization.DataContractSerializer" - 我正在寻找一种方法,因此我不需要将所有类也标记为 [Serializable] - 例如,我没有为 AppFabric 标记,因此它与上述不同。
-
是否抛出异常?如果是这样,您能否分享异常的完整
ToString()输出,包括异常类型、消息和回溯? -
DataContractSerializer与Serializable无关,它们是完全独立的序列化机制。抛出异常的任何东西显然都希望使用后者。简要查看 StackExchange.Redis 文档,API 采用字符串值,因此我认为您需要添加导致异常的代码。
标签: c# serialization redis stackexchange.redis