繁体   English   中英

c#WebApi十进制序列化

[英]c# WebApi serialization of decimal

我有一个WebApi控制器,它返回一个List。 我的问题是,我不希望在生成的JSON中使用xxxx.0,因为这会在我的javascript中造成严重问题。 有没有办法防止.net值的.net序列化,以便它们被截断?

当前输出:

{"Temperature":[[1465434000.0,4.00],[1465437600.0,15.40],[1465441200.0,15.26],

通缉:

{"Temperature":[[1465434000,4.00],[1465437600,15.40],[1465441200,15.26],

被序列化的对象:

public class ChartDataMonthly
{
    public List<decimal[]> Temperature { get; set; }

我想我要开始在你的对象上为你的javascript模型创建一个新属性:

public class ChartDataMonthly
{
    public List<decimal[]> Temperature { get; set; }

    // This can be "unmapped" to ignore object mappers
    public List<string> RoundedTemperature 
    { 
        get
        {
            return Temperature.Select(t => Math.Round(t).ToString()).ToList();
        }
    }
    // rest of model
}
public class ChartDataMonthly
{
    public List<decimal[]> Temperature { get; set; }

    public List<decimal[]> Round()
    {
        List<decimal[]> NewTemp = new List<decimal[]>();
        foreach(var t in Temperature)
        {
           t[0] = Math.Round(t[0], 0);
           NewTemp.Add(t)
        }

        return NewTemp;
    }
}

我看到一个类似于这个的新答案在我的前两分钟发布,但这大致是我将如何开始。 您可以使用返回List或Json.SerializeObject并通过稍微修改方法返回字符串以返回类似于@dckuehn的答案的字符串。

    public class ChartDataMonthly
    {
        public List<decimal[]> _temperature;
        public List<decimal[]> Temperature
        {
            get { return _temperature; }
            set
            {
                _temperature = value;
                //edit each value by reference
                _temperature.ForEach(x => x.ToList().ForEach(y =>y= Convert.ToDecimal(Math.Round(Convert.ToDouble(y)))));
            }
        }
    }

未经测试但我认为它应该自动完成工作您只需舍入列表中每个数组的每个字段。

如果你在setter / getter中执行它,它会在.net绑定器将JavaScript绑定到你的对象时自动执行

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM