Строка 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.
Здравствуйте, Passerby, Вы писали:
P>нельзя, т.к. число может быть записано в экспоненциальной форме (без суффикса m).
P>Везде в программе делать приведение double к decimal не хочется. Можно ли как-то делать приведение к decimal на стадии получения JsonConvert.DeserializeObject класса? Использую Newtonsoft.
Google://newtonsoft json custom deserializer for property
Здравствуйте, 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 }"
Здравствуйте, JohnnyJ, Вы писали:
JJ>Что имеется в виду под "экспоненциальной формой"?
https://en.wikipedia.org/wiki/Scientific_notation
Здравствуйте, Sharov, Вы писали:
S>Здравствуйте, JohnnyJ, Вы писали:
JJ>>Что имеется в виду под "экспоненциальной формой"?
S>https://en.wikipedia.org/wiki/Scientific_notation
Эта нотация мне известна, но она вполне штатно конвертируется из коробки (см. свойство Rate1 в моем примере).
Именно поэтому я решил уточнить, что ТС понимает под "экспоненциальной формой".
Здравствуйте, 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);
Спасибо.