我们连接到一个外部系统,该系统提供了一个WSDL,该WSDL要求将小数提供给两位小数-即:
<collectionAmount>1000.00</collectionAmount>但是,当我们的客户端序列化SOAP请求时,小数以单精度显示:
<collectionAmount>1000.0</collectionAmount>我们尝试使用元数据扩展:
[MetadataType(typeof(amountSetRequestMetadata))]
public partial class amountSetRequest
{
internal sealed class amountSetRequestMetadata
{
[XmlIgnore]
public decimal collectionAmount { get; set; }
[System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified, Order = 14, ElementName = "collectionAmount")]
public string collectionAmountString => "yay!";
}
}amountSetRequest是WSDL服务自动生成器生成的分部类。输出XML没有什么不同,因此这似乎不会对请求产生任何影响。
我们会认为这是很常见的,但不知道如何解决。我们已经看到了扩展基本XML序列化程序的解决方案。
以这种方式序列化SOAP请求的最简洁方法是什么?
发布于 2019-10-09 23:08:56
因此,我们通过稍微修改类型系统来修复它。
事实证明,从字符串转换回小数的小数具有不同的精度。因此我们这样做了:
public void RequestAmount(decimal amount) {
var request = new amountSetRequest()
request.collectionAmount = Convert.ToDecimal(amount.ToString("F2"));
// ...
}在执行此操作时,当XML序列化程序看到小数时,它将保持Convert.ToDecimal从ToString中使用的精度。
发布于 2019-10-09 14:42:29
使用以下命令:
public partial class amountSetRequest
{
private decimal _collectionAmount { get; set; }
public string collectionAmount {
get {return _collectionAmount.ToString("F2");}
set {_collectionAmount = decimal.Parse(value);}
}
}https://stackoverflow.com/questions/58289078
复制相似问题