WCF Datacontract-它是否支持可为空的数据成员?
是的,当然 创建可为空的数据成员应该不会有任何问题,它们将在生成的WSDL/XSD中作为“xs:nillable=true”成员处理。没问题。是的,请参阅: 数据协定序列化程序完全支持可为空的类型 @卡霍恩和巴特瓦德: 我们通过分两步使用WCF Datacontract-它是否支持可为空的数据成员?,wcf,Wcf,是的,当然 创建可为空的数据成员应该不会有任何问题,它们将在生成的WSDL/XSD中作为“xs:nillable=true”成员处理。没问题。是的,请参阅: 数据协定序列化程序完全支持可为空的类型 @卡霍恩和巴特瓦德: 我们通过分两步使用可为null的或?类型解决了此问题: 在包含泛型字段的类中,按如下方式定义字段: [DataMember] public int? NumberOfPages; //////////// Is this supported???? [
可为null的或?
类型解决了此问题:
在包含泛型字段的类中,按如下方式定义字段:
[DataMember]
public int? NumberOfPages; //////////// Is this supported????
[DataMember]
public bool? Color; //////////// Is this supported????
[DataMember]
public int? BulkQuantity;
[DataMember]
nullable MyField{get;set;}
在使用此基类的数据协定中,可以使用一些类似注释的标记定义序列化程序/反序列化程序已知的元素。在这里,我们定义了例如:
nullable<GenType> MyField {get; set;}
[可序列化]
[数据合同]
[KnownType(typeof(BaseClass))]
我认为可以使用BaseClass
,而不是BaseClass
在这之后,通用空值的序列化对我们有效。在我的例子中,传入的可空整数似乎被视为空字符串,而不是空值
下面是我如何处理代码中的null值
[Serializable]
[DataContract]
[KnownType(typeof(BaseClass<nullable<DateTime>>))]
但当我使用WCF测试客户端进行测试时,它会说“WCF测试客户端不支持此操作”。也许只是WCF测试客户端无法处理它!试着编写你自己的小客户机来调用一个函数并获取信息;该网页允许您在浏览器中测试服务,但仅支持将基本数据类型作为参数。这不会损害服务的功能。如果您不想编写自己的工具,请尝试使用MS WCF测试客户端(),如果您使用[MessageHeader],则需要[MessageBodyMember]来获取空值。但我认为对于DataMember来说应该没问题。
[XmlIgnore]
public int? NumberOfPagesCount{ get; set; }
[XmlElement("NumberOfPages")]
public string NumberOfPagesText
{
get { return this.NumberOfPagesCount.HasValue ? this.NumberOfPagesCount.Value.ToString("F2") : string.Empty; }
set
{
if (!string.IsNullOrEmpty(value))
{
this.NumberOfPagesCount= Convert.ToInt32(value);
}
else
{
this.NumberOfPagesCount= null;
}
}
}