我有一个 ASP.NET MVC 应用程序。此应用程序包括 C#、Razor 和 JSON.NET。我有一个如下所示的 C# 对象:
public class MyBlueprint
{
public string Name { get; set; }
public string Approach { get; set; }
public object Value { get; set; }
}
此时,我有一个 MyBlueprint
对象列表,如下所示:
List<MyBlueprint> x = new List<MyBlueprint>();
{
new MyBlueprint { Name="Bill", Approach="straight", Value=1 },
new MyBlueprint { Name="Bill", Approach="straight", Value=7 },
new MyBlueprint { Name="Bill", Approach="straight", Value=10 },
new MyBlueprint { Name="John", Approach="straight", Value=120 },
new MyBlueprint { Name="John", Approach="straight", Value=105 },
new MyBlueprint { Name="John", Approach="straight", Value=150 },
new MyBlueprint { Name="John", Approach="straight", Value=100 },
new MyBlueprint { Name="Jill", Approach="curved", Value=1 },
new MyBlueprint { Name="Jill", Approach="curved", Value=2 },
new MyBlueprint { Name="Jill", Approach="curved", Value=5 },
new MyBlueprint { Name="Jill", Approach="curved", Value=8 }
};
我需要将 MyBlueprint
对象集合展平为预定义的 JSON 结构。最终目标是让 JSON 在我看来如下所示:
var results = [
{ "name": "Bill", "approach":"straight", options: { begin: 1, end: 10 } },
{ "name": "John", "approach":"straight", options: { begin: 100, end: 150 } },
{ "name": "Jill", "approach":"curved", options: { chosen: [1, 2, 5, 8] } }
];
options
参数根据 approach
的值具有不同的属性。上面的 JSON 显示了两种不同的结构:curved
和 straight
。我还会有更多。因此,我试图找出一种动态方法,而无需创建大量模型类。目前,我有以下内容:
var names = new[] { "Bill", "John", "Jill" };
foreach (var name in names)
{
var blueprints = x.Where(y => y.Name == name).Select(z => z.Value.ToString());
}
我知道如何获取曲线
集的选择
值列表。我知道如何获取 straight
集的 begin
和 end
值。然而,一旦我拥有它们,我不知道如何处理它们。我试图弄清楚如何创建一个动态 C# 对象,我可以将其序列化为 JSON 并将其放入 View 中。我缺少什么?我感觉有点被困住了。
最佳答案
我建议你必须做以下事情。
创建类。
public class Options
{
public Options()
{
}
public Options(List<int> d,string approach)
{
if (approach == "straight")
{
begin = d.Min();
end = d.Max();
}
else if (approach == "curved")
{
choosen = d.Select(cc => cc).ToArray();
}
}
public int? begin { get; set; }
public int? end { get; set; }
public int[] choosen { get; set; }
}
和你的 linq 查询
var result = (from item in x
group item by new { item.Name, item.Approach } into g
select new
{
name = g.Key.Name,
approach = g.Key.Approach,
options = new Options(g.Select(cc => Convert.ToInt32(cc.Value)).ToList(), g.Key.Approach)
}).ToList();
string value = Newtonsoft.Json.JsonConvert.SerializeObject(result, new Newtonsoft.Json.JsonSerializerSettings() { NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore });
关于c# - 将动态 C# 对象序列化为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27699521/