【问题标题】:Using Linq to shape structure for Json serialization使用 Linq 为 Json 序列化构建结构
【发布时间】:2012-06-08 06:55:42
【问题描述】:

我有一个非常简单的结构,看起来像这样:

var list = new List<CategoryInTimeItem>
        {
            new CategoryInTimeItem { Name = "Food", Year = 2012, Month = 1, Amount = 100 },
            new CategoryInTimeItem { Name = "Food", Year = 2012, Month = 2, Amount = 110 },
            new CategoryInTimeItem { Name = "Food", Year = 2012, Month = 3, Amount = 130 },
            new CategoryInTimeItem { Name = "Food", Year = 2012, Month = 4, Amount = 130 },
            new CategoryInTimeItem { Name = "Transport", Year = 2012, Month = 1, Amount = 1000 },
            new CategoryInTimeItem { Name = "Transport", Year = 2012, Month = 2, Amount = 1101 },
            new CategoryInTimeItem { Name = "Transport", Year = 2012, Month = 3, Amount = 1301 },
            new CategoryInTimeItem { Name = "Transport", Year = 2012, Month = 4, Amount = 1301 }
        };

我想重塑这个结构,这样当它被序列化为 json 时,结果应该如下所示,每个名称对应一个数组:

[
[["2012-1", 100], ["2012-2", 110], ["2012-3", 130], ["2012-4", 130]],
[["2012-1", 1000], ["2012-2", 1101], ["2012-3", 1301], ["2012-4", 1301]]
]

我的 linq 查询如下所示:

   result.Values = 
                from d in list
                orderby d.Name , d.Year , d.Month
                group d by d.Name
                into grp
                select new[]
                {
                    grp.Select(y => new object[] {y.DateName, y.Amount})
                };

这几乎可以工作,但是我得到了一个额外的“级别”数组,所以当序列化为 json 时,结果如下所示:

[
[[["2012-1", 100], ["2012-2", 110], ["2012-3", 130], ["2012-4", 130]]],
[[["2012-1", 1000], ["2012-2", 1101], ["2012-3", 1301], ["2012-4", 1301]]]
]

我在这里做错了什么?

【问题讨论】:

    标签: json linq c#-4.0


    【解决方案1】:

    你几乎到过那里,只是代替

    from d in list
    ...
    select new[]
    {
        grp.Select(y => new object[] {y.DateName, y.Amount})
    }
    

    简单地说:

    from d in list
    ...
    select grp.Select(y => new object[] {y.DateName, y.Amount}).ToList()
    

    你只是在最后添加了一个不必要的数组级别。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多