C# 在JsonConvert之后,我的组密钥发生了什么变化?
我正在尝试做一个linq小组,它似乎在工作,但当我做一个JSONVERT,它似乎是很多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
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
}
]
}