WCF Datacontract-它是否支持可为空的数据成员?

WCF Datacontract-它是否支持可为空的数据成员?,wcf,Wcf,是的,当然 创建可为空的数据成员应该不会有任何问题,它们将在生成的WSDL/XSD中作为“xs:nillable=true”成员处理。没问题。是的,请参阅: 数据协定序列化程序完全支持可为空的类型 @卡霍恩和巴特瓦德: 我们通过分两步使用可为null的或?类型解决了此问题: 在包含泛型字段的类中,按如下方式定义字段: [DataMember] public int? NumberOfPages; //////////// Is this supported???? [

是的,当然

创建可为空的数据成员应该不会有任何问题,它们将在生成的WSDL/XSD中作为“xs:nillable=true”成员处理。没问题。

是的,请参阅:

数据协定序列化程序完全支持可为空的类型

@卡霍恩和巴特瓦德:

我们通过分两步使用
可为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;
                }
            }
        }