【问题标题】:I am facing an issue by converting JSON to c# using JSON converter我使用 JSON 转换器将 JSON 转换为 c# 时遇到问题
【发布时间】: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

标签: c#


【解决方案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();    
        }       
    }
}

【讨论】:

    猜你喜欢
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多