Десятичное число не преобразует экспоненциальное значение (jsonConverter из JSON в C #) - отображение - PullRequest
0 голосов
/ 05 сентября 2018

Я сталкиваюсь с проблемой преобразования JSON в c # с использованием JSON Converter. где у меня есть поле decimal и JSON имеет экспоненциальное значение , которое не преобразуется, потому что decimal принимает его как строку, а не double:

Ошибка: Не удалось преобразовать строку в десятичную: 1.096E8

C#    
public decimal Amount { get; set; }
JSON
"Amount":"1.096E8"

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

, поэтому я использовал [JsonConstructor], который я прикрепил к пользовательскому конструктору моего класса.

Вот код.

 class myClass
 {
    public decimal Amount { get; set; }

    [JsonConstructor]
    public myClass(string amount)
    {
        this.Amount = Decimal.Parse(amount, System.Globalization.NumberStyles.Float);
    }
}
0 голосов
/ 05 сентября 2018

Если вы хотите преобразовать свое экспоненциальное число в JsonConverter, тогда

public class MyClassName
{
    [JsonConverter(typeof(JsonExponentialConverter))]
    public decimal Amount { get; set; }
}

Это конвертер json, который преобразует ваше экспоненциальное число в десятичное

public class JsonExponentialConverter : JsonConverter
{
    public override bool CanRead { get { return true; } }
    public override bool CanConvert(Type objectType)
    {
        return true;
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        serializer.Serialize(writer, value);
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        decimal amount = 0;
        if (decimal.TryParse(reader.Value.ToString(), NumberStyles.Any, CultureInfo.InvariantCulture, out amount))
        {
            return amount;
        }
        return amount;
    }
}

И вызов выше класса с JSES десериализатором, как

public class Program
{
    static void Main(string[] args)
    {
        var json = @"{'Amount':'1.096E8'}";
        var amount = JsonConvert.DeserializeObject<MyClassName>(json);
    }
}

Выход:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...