WCF中可为空值类型的错误

时间:2018-05-09 09:17:28

标签: asp.net wcf

我在

之后面临以下问题

http://msdn.microsoft.com/en-us/library/ms187557.aspx(“输入参数处理”一节,但建议的解决方案似乎没有工作)。似乎传入的 NullableInteger 始终被视为空字符串而非空值

我创建了一个MessageContract,其中包含Integer的可空类型,如下所示:

<xs:complexType>
    <xsTongue Tiedequence>
:
<xs:element minOccurs="0" maxOccurs="1" name="InputSub1" type="tnsTongue TiedubClass"/>
<xs:element minOccurs="1" maxOccurs="1" name="NullableInteger" nillable="true" type="xs:int"/>
    </xsTongue Tiedequence>
</xs:complexType>

我正在使用SoapUI来测试带有以下SOAP请求的可空整数

<soapenv:Envelope xmlnsTongue Tiedoapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:myw="MyWCFTest">
<soapenv:Header/>
<soapenv:Body>
  <myw:MessageRequest>
     <myw:InputSub1>
        <mywTongue TiedubProperty1>USD</mywTongue TiedubProperty1>
     </myw:InputSub1>
     <myw:NullableInteger myw:nil="true" />
  </myw:MessageRequest>
</soapenv:Body>
</soapenv:Envelope>

但是,它总是抛出错误,并带有以下缩写说明:

  

输入字符串的格式不正确。                        在System.Number.StringToNumber(String str,NumberStyles选项,   NumberBuffer&安培; number,NumberFormatInfo info,Boolean parseDecimal)   在System.Number.ParseInt32(String s,NumberStyles样式,   System.Xml.XmlConvert.ToInt32(String s)的NumberFormatInfo信息   在   Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderIServiceDemo1.Read3_NullableOfInt32(布尔   checkType)at   Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderIServiceDemo1.Read5_MessageRequest()   在   Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer1.Deserialize(XmlSerializationReader   读者)   System.Xml.Serialization.XmlSerializer.Deserialize(的XmlReader   xmlReader,String encodingStyle,XmlDeserializationEvents   事件)                        System.FormatException

注意:我面临一个完全相同的问题,当我谷歌时,我发现这已经发布在Error in Nullable Value Types in WCF,但几乎没有答案。我在这里发布它(StackOverflow)以获得更多的关注。

2 个答案:

答案 0 :(得分:1)

nil属性在您的命名空间xmlns:myw="MyWCFTest中不存在。

它是XML架构命名空间http://www.w3.org/2001/XMLSchema-instance的一部分。

在根元素<soapenv:Envelope>中添加对此的引用,如下所示

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"然后使用该别名引用nil属性,即xsi:nil="true"

答案 1 :(得分:0)

我找到了一种解决方法来处理代码背后的可空

    [XmlIgnore]
    public int? NullableIntegerCount{ get; set; }

    [XmlElement("NullableInteger")]
    public string NullableIntegerText
    {
        get { return this.NumberOfPagesCount.HasValue ? this.NullableIntegerCount.Value.ToString("F2") : string.Empty; }
        set
        {
            if (!string.IsNullOrEmpty(value))
            {
                this.NullableIntegerCount= Convert.ToInt32(value);
            }
            else
            {
                this.NullableIntegerCount= null;
            }
        }
    }