当使用 DataContractSerializer 编写具有如下成员的 DataContract 时:
[DataMember]
public PropertyId PropId { get; set; }
它报告序列化错误:
SerializationException:枚举值“8493”对于类型无效
'EnumType' 并且无法序列化。确保必要的枚举
值存在并用 EnumMemberAttribute 属性标记
如果类型具有 DataContractAttribute 属性。
是的,该特定枚举值在 C# 枚举定义中不存在,因为 PropertyId 是动态的,并且可能会在重新编译之间添加到数据库(但不会删除)。
由于我们不希望仅仅因为添加了属性而要求重新编译代码,因此除了类型转换和序列化为 Int32 之外,是否有任何解决方案可以解决此类问题(这是我们的起点,但旨在提高类型安全性/可读性) 。
我们希望使用相同的概念将类型安全扩展到更“通用”的 ID。例如,说出诸如 OrderId 之类的内容。将其定义为枚举有一个优点,可以在整个 C# 中获得类型安全。实际的枚举值将不存在,因为它们的生命周期与运行时和编译时相对应。
Similar:
9974127/序列化对象与无效枚举值 https://stackoverflow.com/questions/9974127/serializing-object-with-invalid-enum-value
8913631/wcf-datacontract-class-with-enum-causes-enum-value-1-is-invalid-for-type-e https://stackoverflow.com/questions/8913631/wcf-datacontract-class-with-enum-causes-enum-value-1-is-invalid-for-type-e
我也遇到了同样的问题。使用 ? 使 Enum 字段可为空标记。
[DataMember]
public PropertyId? PropId { get; set; }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)