我得到以下异常试图通过WCF传递对象:与枚举原因WCF DataContract类““枚举值‘-1’是类型无效”错误
有试图序列化错误参数http://tempuri.org/:item。 InnerException消息是'枚举值'-1'对'Models.SubModels.DamageLocations'类型无效,无法序列化。如果类型具有DataContractAttribute属性,请确保存在必要的枚举值并使用EnumMemberAttribute属性标记''。有关更多详细信息,请参阅InnerException。
它的定义是这样的:
[DataContract]
public class Property
{
[DataMember]
public PropertyDamage Damage { get; set; }
public Property()
{
this.Damage = new PropertyDamage();
}
}
而且PropertyDamage
:
[DataContract]
public enum DamageLocations
{
[EnumMember]
Unknown=0,
[EnumMember]
Front,
[EnumMember]
Rear
}
[DataContract]
public class PropertyDamage
{
[Display(Name="Location of Damage:")]
[DataMember(IsRequired=true)]
public DamageLocations DamageLocation { get; set; }
}
编辑 - 这也导致了同样的错误:
public enum DamageLocations
{
Unknown=0,
Front=1,
Rear=2
}
编辑2 - 添加了一个默认值ctor中的枚举没有改变错误:
public PropertyDamage()
{
this.DamageLocation = DamageLocations.Unknown; //0
}
试图研究这个问题,我看到人们得到一个类似的错误“枚举值'0'是无效的”,并且解决方案是将一个0添加到枚举。
虽然我已经有一个0项,并且错误状态-1是无效的。
解决此问题的正确方法是什么?
edit3 - 看起来-1是来自帖子数据,这是提交页面的帖子数据。
Damage.DamageLocation=-1
是你传递一个有效的枚举的字段值?你可以尝试向前后添加值吗? – 2012-01-18 16:27:48
它收到的价值是多少?我的猜测是有人使用-1作为“未知/其他/所有/没有/某事 - 其他” – 2012-01-18 16:29:28
@TomislavMarkovski是的,我试图设置值。请参阅编辑。虽然同样的错误。 – asawyer 2012-01-18 16:29:33