C# 在JsonConvert之后,我的组密钥发生了什么变化?

C# 在JsonConvert之后,我的组密钥发生了什么变化?,c#,json,linq,C#,Json,Linq,我正在尝试做一个linq小组,它似乎在工作,但当我做一个JSONVERT,它似乎是很多 public class StatsVm { public int TotalCount { get; set; } public string Name { get; set; } public DateTime? LoggedDate { get; set; } } 假设我有一个由10个对象组成的数组,其中5个的LoggedDate为2018-02-19

我正在尝试做一个linq小组,它似乎在工作,但当我做一个JSONVERT,它似乎是很多

public class StatsVm
{

        public int TotalCount { get; set; }
        public string Name { get; set; }
        public DateTime? LoggedDate { get; set; }
}
假设我有一个由10个对象组成的数组,其中5个的LoggedDate为2018-02-19,5个的LoggedDate为2018-02-20

我想按日期而不是时间部分对它们进行分组

var d = results.GroupBy(group => group.LoggedDate.GetValueOrDefault().ToString("yyyy-MM-dd")).ToList();
这给了我一张清单,这是我想要的,但当我想要的时候

JsonConvert.SerializeObject(d)
我丢了分组键。我猜它可能不是有效的json或其他东西。但我希望在json中有类似的内容

{
    "2018-1-1": [
        {
            "LoggedDate": "2018-1-1",
            "Name": "Test",
            "TotalCount": 20
        },
        {
            "LoggedDate": "2018-1-1",
            "Name": "Test2",
            "TotalCount": 1
        }
    ],
    "2018-1-2": [
        {
            "LoggedDate": "2018-1-2",
            "Name": "Test",
            "TotalCount": 20
        },
        {
            "LoggedDate": "2018-1-2",
            "Name": "Test2",
            "TotalCount": 1
        }
    ]
}

通过使用字典,我可以创建您需要的结果

示例代码:

void Main()
{
    // Create dummy data
    var results = new List<StatsVm>();
    // Create dummy data
    var results = new List<StatsVm>();
    results.Add(new StatsVm { TotalCount = 20, Name = "Test", LoggedDate = new DateTime(2018, 1, 1) });
    results.Add(new StatsVm { TotalCount = 1, Name = "Test2", LoggedDate = new DateTime(2018, 1, 1) });
    results.Add(new StatsVm { TotalCount = 20, Name = "Test", LoggedDate = new DateTime(2018, 1, 2) });
    results.Add(new StatsVm { TotalCount = 1, Name = "Test2", LoggedDate = new DateTime(2018, 1, 2) });

    // Creates the dictionary
    var output = results
        .Select(r => new
        {
            LoggedDate = r.LoggedDate.GetValueOrDefault().ToString("yyyy-MM-dd"),
            Name = r.Name,
            TotalCount = r.TotalCount
        })
        .GroupBy(group => group.LoggedDate)
        .ToDictionary(t => t.Key);

    // Serializes the dictionary as a JSON string
    var serializedString = JsonConvert.SerializeObject(output, Newtonsoft.Json.Formatting.Indented);

    // Prints the serialized string
    Console.WriteLine(serializedString);
}

public class StatsVm
{

    public int TotalCount { get; set; }
    public string Name { get; set; }
    public DateTime? LoggedDate { get; set; }
}
{
  "2018-01-01": [
    {
      "LoggedDate": "2018-01-01",
      "Name": "Test",
      "TotalCount": 20
    },
    {
      "LoggedDate": "2018-01-01",
      "Name": "Test2",
      "TotalCount": 1
    }
  ],
  "2018-01-02": [
    {
      "LoggedDate": "2018-01-02",
      "Name": "Test",
      "TotalCount": 20
    },
    {
      "LoggedDate": "2018-01-02",
      "Name": "Test2",
      "TotalCount": 1
    }
  ]
}