0

我正在从 .NET 客户端向 java webservice 进行 webservice 调用。Web 服务请求消息中的字段之一是小数。

它是使用代理请求对象设置的:

decimal value = 3.0
request.DecimalValue = value ;
javaService.Process(request);

当消息被序列化为soap 时,DecimalValue 设置为3.000000。然而,java web 服务出错了,因为它只需要小数点后 3 位数字。关于如何解决这个问题的任何想法?我无法控制 java web 服务。

添加:

java webservice 的模式将 DecimalValue 定义为

<xs:simpleType name="DecimalValue">
 <xs:restriction base="xs:decimal">
  <xs:totalDigits value="9" />
  <xs:fractionDigits value="3" />
  <xs:pattern value="\d{1,5}\.\d{3}" />
 </xs:restriction>

通过添加对端点的引用来生成 Web 服务代理。

4

1 回答 1

0

鉴于此示例,它是使用您提供的简单 xsd 创建的:

    [System.Runtime.Serialization.DataMemberAttribute(Order=0)]
    public decimal DecimalValue;

我会将其更改为以下内容:

    [System.Runtime.Serialization.DataMemberAttribute(Order=0, Name="DecimalValue")]
    private string DecimalValueFormatted;
    private decimal decimal_value_int;

    public decimal DecimalValue {
        get { return decimal_value_int; }
        set 
        { 
            decimal_value_int = value; 
            DecimalValueFormatted = String.format("{0:N2}", value);
        }
    }

注意:这有点像 hack,如果你必须为很多类型做这件事,你会想要创建你自己的格式属性,你可以把它放在数据成员上,并为检查你的属性的小数添加自定义类型绑定。我实际上还没有完成属性方法,所以这可能比听起来更困难。

于 2012-05-07T16:41:37.580 回答