Как преобразовать строку из Json в decimal, если она в форма
От: Passerby  
Дата: 18.12.20 19:06
Оценка:
Строка Json преобразуется JsonConvert.DeserializeObject в:
public class FromJson
  {
    public string rate { get; set; }
  }

причем rate в формате double, т.е. можно сразу:
public class FromJson
  {
    public double rate { get; set; }
  }

Но дальнейшие расчеты ведутся в decimal.
Преобразовывать строку сразу в
public class FromJson
  {
    public decimal rate { get; set; }
  }

нельзя, т.к. число может быть записано в экспоненциальной форме (без суффикса m).
Везде в программе делать приведение double к decimal не хочется. Можно ли как-то делать приведение к decimal на стадии получения JsonConvert.DeserializeObject класса? Использую Newtonsoft.
Отредактировано 18.12.2020 19:09 Passerby . Предыдущая версия . Еще …
Отредактировано 18.12.2020 19:07 Passerby . Предыдущая версия .
Re: Как преобразовать строку из Json в decimal, если она в форма
От: Слава  
Дата: 18.12.20 19:33
Оценка: 1 (1)
Здравствуйте, Passerby, Вы писали:

P>нельзя, т.к. число может быть записано в экспоненциальной форме (без суффикса m).

P>Везде в программе делать приведение double к decimal не хочется. Можно ли как-то делать приведение к decimal на стадии получения JsonConvert.DeserializeObject класса? Использую Newtonsoft.

Google://newtonsoft json custom deserializer for property
Re: Как преобразовать строку из Json в decimal, если она в форма
От: JohnnyJ Германия  
Дата: 18.12.20 20:59
Оценка: 2 (1)
Здравствуйте, Passerby, Вы писали:

P>Преобразовывать строку сразу в

P>
P>public class FromJson
P>  {
P>    public decimal rate { get; set; }
P>  }
P>

P>нельзя, т.к. число может быть записано в экспоненциальной форме (без суффикса m).
P>Везде в программе делать приведение double к decimal не хочется. Можно ли как-то делать приведение к decimal на стадии получения JsonConvert.DeserializeObject класса? Использую Newtonsoft.

Что имеется в виду под "экспоненциальной формой"?
Вот код, который работает корректно, насколько я себе представляю:

    class Program
    {
        static void Main(string[] args)
        {
            string json = @"{ ""rate1"": ""0.5343E01"", ""rate2"": ""5.343"", ""rate3"": 5.343 }";

            var fromJson = JsonConvert.DeserializeObject<FromJson>(json);

            Console.WriteLine(fromJson);
        }
    }

    public record FromJson(decimal Rate1, decimal Rate2, decimal Rate3);


программа выводит:

"FromJson { Rate1 = 5,343, Rate2 = 5,343, Rate3 = 5,343 }"
Зри в корень!
Re[2]: Как преобразовать строку из Json в decimal, если она в форма
От: Sharov Россия  
Дата: 19.12.20 09:53
Оценка:
Здравствуйте, JohnnyJ, Вы писали:

JJ>Что имеется в виду под "экспоненциальной формой"?


https://en.wikipedia.org/wiki/Scientific_notation
Кодом людям нужно помогать!
Re[3]: Как преобразовать строку из Json в decimal, если она в форма
От: JohnnyJ Германия  
Дата: 19.12.20 11:57
Оценка:
Здравствуйте, Sharov, Вы писали:

S>Здравствуйте, JohnnyJ, Вы писали:


JJ>>Что имеется в виду под "экспоненциальной формой"?


S>https://en.wikipedia.org/wiki/Scientific_notation


Эта нотация мне известна, но она вполне штатно конвертируется из коробки (см. свойство Rate1 в моем примере).
Именно поэтому я решил уточнить, что ТС понимает под "экспоненциальной формой".
Зри в корень!
Re[4]: Как преобразовать строку из Json в decimal, если она в форма
От: Passerby  
Дата: 19.12.20 21:16
Оценка:
Здравствуйте, JohnnyJ, Вы писали:

JJ>Здравствуйте, Sharov, Вы писали:


S>>Здравствуйте, JohnnyJ, Вы писали:


JJ>>>Что имеется в виду под "экспоненциальной формой"?


S>>https://en.wikipedia.org/wiki/Scientific_notation


JJ>Эта нотация мне известна, но она вполне штатно конвертируется из коробки (см. свойство Rate1 в моем примере).

JJ>Именно поэтому я решил уточнить, что ТС понимает под "экспоненциальной формой".
Я не знал, что экспоненциальная форма строкового double штатно конвертируется в decimal.
Проверил для десериализатора Майкрософт — тоже работает.
static void Main(string[] args)
    {      
      string json = @"{ ""rate1"": 0.5343E01, ""rate2"": 5.343, ""rate3"": 5.343 }";
      var fromJson = System.Text.Json.JsonSerializer.Deserialize<FromJson>(json);
      Console.WriteLine(fromJson);
    }
    public record FromJson(decimal rate1, decimal rate2, decimal rate3);

Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.