首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WCF将decimal序列化为具有2个小数精度的字符串

WCF将decimal序列化为具有2个小数精度的字符串
EN

Stack Overflow用户
提问于 2019-10-08 23:02:31
回答 2查看 426关注 0票数 1

我们连接到一个外部系统,该系统提供了一个WSDL,该WSDL要求将小数提供给两位小数-即:

代码语言:javascript
运行
复制
<collectionAmount>1000.00</collectionAmount>

但是,当我们的客户端序列化SOAP请求时,小数以单精度显示:

代码语言:javascript
运行
复制
<collectionAmount>1000.0</collectionAmount>

我们尝试使用元数据扩展:

代码语言:javascript
运行
复制
    [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请求的最简洁方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-09 23:08:56

因此,我们通过稍微修改类型系统来修复它。

事实证明,从字符串转换回小数的小数具有不同的精度。因此我们这样做了:

代码语言:javascript
运行
复制
public void RequestAmount(decimal amount) {
   var request = new amountSetRequest()
   request.collectionAmount = Convert.ToDecimal(amount.ToString("F2"));
   // ...
}

在执行此操作时,当XML序列化程序看到小数时,它将保持Convert.ToDecimalToString中使用的精度。

票数 1
EN

Stack Overflow用户

发布于 2019-10-09 14:42:29

使用以下命令:

代码语言:javascript
运行
复制
    public partial class amountSetRequest
    {
        private decimal _collectionAmount { get; set; }

        public string collectionAmount {
            get {return _collectionAmount.ToString("F2");}
            set {_collectionAmount = decimal.Parse(value);}
        }
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58289078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档