C# JsonSerialize 没有成员名称

本文关键字:成员 JsonSerialize | 更新日期: 2023-09-27 17:56:36

我有以下类,我喜欢序列化为 Json。我目前得到这样的东西

 var pgdata =   {"SeriesList":[{"label":"Fund","data":[{"Year":2000,"RateOfReturn":0.02},{"Year":2009,"RateOfReturn":0.03}]},{"label":"Benchmark","data":[{"Year":2000,"RateOfReturn":0.024},{"Year":2009,"RateOfReturn":0.032}]}]} ;

我喜欢得到这样的东西

var pgdata =   {"SeriesList":[{"label":"Fund","data":[[2000,0.02],[2009,0.03]]},{"label":"Benchmark","data":[[2000,0.024],[2009,0.032]]}]} ;

C# 代码:

public class JsonPerformGraphData
    {
        public List<Series> SeriesList = new List<Series>();
        public Series GetSeries(string name)
        {
            foreach (Series s in SeriesList)
            {
                if (s.label == name)
                    return s;
            }
            Series series = new Series(name);
            SeriesList.Add(series);
            return series;
        }
        public void Add(PerformanceGraphItem ppgi)
        {
            Series s = GetSeries(ppgi.PerformanceGraphSeries.Name);
            s.addItem(ppgi.Year, ppgi.RateOfReturn);
        }

        public class Series
        {
            public string label;
            public List<Data> data = new List<Data>();
            public Series(String name)
            {
                label = name;
            }
            public void addItem(short year, double rateOfReturn)
            {
                data.Add(new Data(year,rateOfReturn));
            }
        }
        public class Data
        {
            public short Year;
            public double RateOfReturn;
            public Data(short year, double rateOfReturn)
            {
                Year = year;
                RateOfReturn = rateOfReturn;
            }
        }
    }

C# JsonSerialize 没有成员名称

您不使用 json.NET 有什么特殊原因吗? 它已经解决了 C# 开发人员的序列化问题,并且很少有理由不使用它。 我遇到的唯一问题与它在从 JSON 反序列化中使用接口对象的不灵活性有关,但除非您对此类进行单元测试,否则这应该不是问题(而且看起来不像您)。

出于您的目的,json.NET 应该为您提供所需的输出,而无需自己滚动序列化程序。

编辑:另外,为了清楚起见,json.NET 确实支持按照您想要的方式在没有成员名称的情况下进行序列化。 只需向每个成员添加一个 JsonProperty 属性即可。