我通过使用JSON转换器将JSON转换为C#来面对问题



我通过使用JSON转换器将JSON转换为C#来面对问题。在转换值时,我在哪里具有10000个字段小数为10000.0 - 如何限制该值?

using System;
using Newtonsoft.Json;

public class Program
{
    public class Employee  
{  
    public int ID { get; set; }  
    public string Name { get; set; }  
    public decimal? Salary { get; set; }  
}  
    public static void Main()
    {
         // Serializaion  
    Employee empObj = new Employee();  
    empObj.ID = 1;  
    empObj.Name = "Manas";  
    empObj.Salary = 10000;
    // Convert Employee object to JOSN string format   
    string jsonData = JsonConvert.SerializeObject(empObj);  
    Console.WriteLine(jsonData); 
    }
}

实际结果:

{"ID":1,"Name":"Manas","Salary":10000.0}

预期结果:

{"ID":1,"Name":"Manas","Salary":10000}

尝试使用自定义转换器,请参见下面的摘要。

using System;
using System.Globalization;
using Newtonsoft.Json;

public class Program
{
    public class Employee
    {
        public int ID { get; set; }
        public string Name { get; set; }
        [JsonConverter(typeof(CustomDecimalConverter))]
        public decimal? Salary { get; set; }
    }
    public static void Main()
    {
        // Serializaion  
        var empObj = new Employee { ID = 1, Name = "Manas", Salary = 10000 };
        // Convert Employee object to JOSN string format   
        var jsonData = JsonConvert.SerializeObject(empObj);
        Console.WriteLine(jsonData);
        Console.ReadLine();
    }
    public class CustomDecimalConverter : JsonConverter    
    {    
        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)    
        {    
            writer.WriteValue(((decimal)value).ToString(CultureInfo.InvariantCulture));    
        }
        public override bool CanRead => false;
        public override bool CanConvert(Type objectType)    
        {    
            return objectType == typeof(decimal) || objectType == typeof(decimal?);    
        }
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)    
        {    
            throw new NotImplementedException();    
        }       
    }
}