C# 无法序列化wcf服务中的空整数字段
尝试将数据从我的服务序列化到客户端时,我的WCF服务中出现以下错误。我知道错误发生的原因,但不知道如何解决 异常类型:CommunicationException-服务或客户端应用程序中的通信错误C# 无法序列化wcf服务中的空整数字段,c#,.net,wcf,serialization,C#,.net,Wcf,Serialization,尝试将数据从我的服务序列化到客户端时,我的WCF服务中出现以下错误。我知道错误发生的原因,但不知道如何解决 异常类型:CommunicationException-服务或客户端应用程序中的通信错误 错误:格式化程序在尝试反序列化消息时引发异常:尝试反序列化参数时出错。InnerException消息是'ValueType'System。Int32'不能为null'。有关更多详细信息,请参阅InnerException 我需要序列化一个空整数属性。它在我的服务上是可以为null的,并且处理得很好,
错误:格式化程序在尝试反序列化消息时引发异常:尝试反序列化参数时出错。InnerException消息是'ValueType'System。Int32'不能为null'。有关更多详细信息,请参阅InnerException 我需要序列化一个空整数属性。它在我的服务上是可以为null的,并且处理得很好,但是当我查看客户端上生成的代理时,它不是可以为null的
[System.Runtime.Serialization.DataMemberAttribute()]
public int VehicleOdometer {
get { return this.VehicleOdometerField; }
set {
if ((this.VehicleOdometerField.Equals(value) != true)) {
this.VehicleOdometerField = value;
this.RaisePropertyChanged("VehicleOdometer");
}
}
}
将我的wcf服务引用配置为可空时,如何在客户端上获取属性?
这是我在服务器端的财产
private int? vehicleOdometer;
[DataMember(Name = "VehicleOdometer")]
public int? VehicleOdometer
{
get { return vehicleOdometer; }
set { vehicleOdometer = value; }
}
这是在我的客户机上生成的属性。注意它是如何不可为空的
[System.Runtime.Serialization.DataMemberAttribute()]
public int VehicleOdometer {
get { return this.VehicleOdometerField; }
set {
if ((this.VehicleOdometerField.Equals(value) != true)) {
this.VehicleOdometerField = value;
this.RaisePropertyChanged("VehicleOdometer");
}
}
}
以下是技巧
private int vehicleOdometer;
private int? vehicleOdometerExposed;
public int VehicleOdometer
{
get { if (vehicleOdometerExposed != null) return (int)vehicleOdometerExposed; else return -1; }
set { vehicleOdometer = value; vehicleOdometerExposed = value; }
}
[DataMember(Name = "VehicleOdometer")]
public int? VehicleOdometerExposed
{
get { return vehicleOdometerExposed; }
set { vehicleOdometerExposed = value; }
}
我需要做的是完全删除我的服务引用,清理我的解决方案,然后再次重新添加我的服务引用。。。这一次,可以为空的字段只是使用了我原来的技术sagesky36 2014年3月28日
这句话为我解决了问题。删除了引用,清理了我的解决方案,重建了服务(在我执行此操作之前出现错误),并重新添加了引用,所有操作都正常进行。这可能是因为该属性最初为int并且已更改为null int吗?您可以尝试重建WCF服务并重新生成代理,以查看是否修复了它。更新
服务参考
您是否尝试在数据成员上设置IsRequired=false
?例如,[DataMember(IsRequired=false)]`?DeanOC/Silvermind,我用新的可为null的整数重建了代理/服务引用,但仍然没有显示在代理中。Tim,我将IsRequired=false放在那里,重建了我的服务,将我的客户端重新配置为更新服务引用,但仍然不能为null…我需要做的是完全删除我的服务引用,清理我的解决方案,然后再次重新添加我的服务引用。。。这一次,可空字段只是使用我原来的技术。@ SaSkyK36。如果你用这种方式解决了你的问题,请考虑把它作为答案并接受它。