我使用 JSON 转换器将 JSON 转换为 c# 时遇到问题
Posted
技术标签:
【中文标题】我使用 JSON 转换器将 JSON 转换为 c# 时遇到问题【英文标题】:I am facing an issue by converting JSON to c# using JSON converter 【发布时间】:2019-05-22 06:35:25 【问题描述】:我在使用 JSON 转换器将 JSON 转换为 c# 时遇到了问题。当转换值为 10000.0 时,我有一个字段十进制值为 10000 - 如何限制?
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
【问题讨论】:
我会说 10000.0 是小数的预期结果。当您想要 10000 时,将小数更改为 int。 我也需要小数 请详细说明“需要小数”是什么意思?举个例子吧。 有什么办法可以限制10000.0
有什么问题?许多解析器会将10000
转换为10000I
而不是10000m
或10000d
。
【参考方案1】:
尝试使用自定义转换器,请参阅下面的 sn-p。
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();
【讨论】:
以上是关于我使用 JSON 转换器将 JSON 转换为 c# 时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章