繁体   English   中英

Configure.Net Core 3 web API 始终解析具有不变文化的数字

[英]Configure .Net Core 3 web API to always parse numbers with invariant Culture

我不知道标题是否有意义,但简而言之,我们需要解析作为字符串传递的双精度数。 但我们无法控制数字的格式(例如句点与逗号小数分隔符)

因此,我们需要使用 Invariant Culture 和 Number Styles 来解析某些文本字段,如下所示:

double.TryParse(ResponseObject.Ammount, 
                NumberStyles.Any, 
                CultureInfo.InvariantCulture, 
                out double amt);

问题是,很难在任何地方强制使用这种重载方法。 所以我希望你可以在 Startup.cs 中配置不变文化的使用,但是我真的不知道该怎么做。

启动中的配置:

private void ConfigureLocalization(IServiceCollection services)
        {
            var jsonLocalizationOptions = Configuration.GetSection(nameof(JsonLocalizationOptions));

            _jsonLocalizationOptions = jsonLocalizationOptions.Get<JsonLocalizationOptions>();
            _defaultRequestCulture = new RequestCulture(_jsonLocalizationOptions.DefaultCulture,
                _jsonLocalizationOptions.DefaultUICulture);
            _supportedCultures = _jsonLocalizationOptions.SupportedCultureInfos.ToList();

            services.AddJsonLocalization(options =>
            {
                options.ResourcesPath = _jsonLocalizationOptions.ResourcesPath;
                options.UseBaseName = _jsonLocalizationOptions.UseBaseName;
                options.CacheDuration = _jsonLocalizationOptions.CacheDuration;
                options.SupportedCultureInfos = _jsonLocalizationOptions.SupportedCultureInfos;
                options.FileEncoding = _jsonLocalizationOptions.FileEncoding;
                options.IsAbsolutePath = _jsonLocalizationOptions.IsAbsolutePath;
            });
        }

(关于这个项目我不能多说,但我们只是说我们必须解析某些包含双精度值的字符串等。我们在这里做的事情没有办法,只能直截了当)。

所以无论如何,如果我们无法在启动时配置它,这就是解决方案。

    public static class ParseUtil
    {
        public static decimal ParseDecimal(string input)
        {
            return decimal.TryParse(input,
                                 NumberStyles.Any,
                                 CultureInfo.InvariantCulture,
                                 out decimal amt) ? amt : 0;
        }

        public static double ParseDouble(string input)
        {
            return double.TryParse(input,
                                 NumberStyles.Any,
                                 CultureInfo.InvariantCulture,
                                 out double amt) ? amt : 0;
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM