decimal数字传给js前转为string, 避免产生精度问题

我在使用RestSharp库, RestRequest.AddJsonBody(data);。其中json对象里有一些decimal类型的字段,我想把这些字段转为string类型,再传给服务端。有办法处理吗?

在使用RestSharp库时,可以使用Json.NET库来处理decimal类型字段转为string类型。首先,将json对象转换为JObject,然后遍历json对象的属性,将decimal类型的字段转换为string类型,并重新赋值给json对象。最后,使用RestRequest.AddJsonBody(data)将处理后的json对象传给服务端。以下是一个示例代码:
C#代码。


        /// <summary>
        /// decimal、float 传给nodejs后,会有精度问题,需要先转为string,再传给服务端。仅转换首层
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        public static JObject TransFieldsDecimal2Str(object data)
        {
            JObject jsonObject = JObject.FromObject(data);
            foreach (var property in jsonObject.Properties())
            {
                if (property.Value.Type == JTokenType.Float) // 判断字段类型为decimal
                {
                    property.Value = property.Value.ToString();
                }
            }
            return jsonObject;
        }
        /// <summary>
        /// decimal、float 传给nodejs后,会有精度问题,需要先转为string,再传给服务端。递推转换
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        public static JObject TransFieldsDecimal2StrAll(object data)
        {
            JObject jsonObject = JObject.FromObject(data);
            transSubs(jsonObject);
            return jsonObject;
        }

        public static void transSubs(JObject jsonObject)
        {
            foreach (var property in jsonObject.Properties())
            {
                if (property.Value.Type == JTokenType.Float) // 判断字段类型为decimal
                {
                    property.Value = property.Value.ToString();

                }
                else if (property.Value.Type == JTokenType.Object)
                {
                    var obj = property.Value as JObject;    //JObject 是JToken的父类
                    transSubs(obj);
                }
                else if(property.Value.Type == JTokenType.Array)  //Array部分未验证
                {
                    var arr = property.Value as JArray;
                    foreach(var item in arr)
                    {
                        var obj = item as JObject;    //JObject 是JToken的父类
                        transSubs(obj);
                    }
                }
            }
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值