Преобразуйте строку с немецким культурным форматом в двойную, используя JsonConvert

Мне нужно преобразовать валюту немецкого формата в JSON (значение может быть отрицательным или положительным) в Double, я могу сделать это, используя double.parse и указав NumberStyle, что-то вроде ниже

CultureInfo culture = CultureInfo.CreateSpecificCulture("de-DE");
var convertedValue = double.Parse("2.664.221,01-", NumberStyles.Currency, culture);

Но есть несколько свойств, требующих преобразования, и я ищу лучший способ сделать это вместо того, чтобы выполнять синтаксический анализ для каждого свойства. Я думаю об использовании JsonSerializerSettings, а затем использовать Json Convert. Но не смог найти способ указать стили в JsonSerializerSettings.

Есть ли лучший способ справиться с этим?

var settings = new JsonSerializerSettings()
                    {
                        Culture = new CultureInfo("de-DE"),
                        //NumberStyle = currency 
                    };

                    var res = JsonConvert.DeserializeObject<MyObject>(json, settings);

person nirag tibdewal    schedule 11.02.2020    source источник
comment
Это сделано специально, 2.664.221,01- — это неверный номер JSON в соответствии со спецификацией JSON json.org/json- ru.html. См. Немецкая культура - получить двойное число из JSON с запятой. (Я полагаю, что JsonSerializerSettings.Culture в основном влияет на сериализацию DateTime, поскольку не существует стандарта представления даты и времени в JSON.)   -  person dbc    schedule 12.02.2020
comment
Гипотетически вы могли бы сериализовать все числа с плавающей запятой как строки, а не как числа, и если бы вы это сделали, вы могли бы отформатировать их в немецкой локали, например. "2.664.221,01-" Если это то, что вам нужно, см. Как выполнить локализацию при сериализации JSON? и Обработка десятичных значений в Newtonsoft.Json. На самом деле я бы сказал, что ваш вопрос является дубликатом этих трех вопросов.   -  person dbc    schedule 12.02.2020