我通过使用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();
}
}
}