我在
之后面临以下问题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)以获得更多的关注。
答案 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;
}
}
}