我使用 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 而不是10000m10000d 【参考方案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# 时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 json.net 将 c# 通用列表转换为 json?

使用 C# 将 csv 文件转换为 json

将 json 转换为 C# 数组?

如何将弱类型 JSON 转换为 C# 可读对象

将 C# 对象转换为 Json 对象

将动态json模型转换为c#对象[重复]