将动态C#对象序列化为JSON
我有一个ASP.NETMVC应用程序。此应用程序包括C#、Razor和JSON.NET。我有一个C#对象,看起来像这样:将动态C#对象序列化为JSON,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,我有一个ASP.NETMVC应用程序。此应用程序包括C#、Razor和JSON.NET。我有一个C#对象,看起来像这样: public class MyBlueprint { public string Name { get; set; } public string Approach { get; set; } public object Value { get; set; } } List<MyBlueprint> x = new List<MyBluep
public class MyBlueprint
{
public string Name { get; set; }
public string Approach { get; set; }
public object Value { get; set; }
}
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 }
};
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] } }
];
此时,我有一个MyBlueprint
对象列表,如下所示:
public class MyBlueprint
{
public string Name { get; set; }
public string Approach { get; set; }
public object Value { get; set; }
}
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 }
};
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] } }
];
根据方法的值,选项
参数具有不同的属性。上面的JSON显示了两种不同的结构:curve
和stright
。我要更多。出于这个原因,我试图找出一种动态方法,而不创建大量的模型类。目前,我有以下几点:
var names = new[] { "Bill", "John", "Jill" };
foreach (var name in names)
{
var blueprints = x.Where(y => y.Name == name).Select(z => z.Value.ToString());
}
我知道如何获得曲线
集合的选择值列表。我知道如何获取直线
集合的开始
和结束
值。然而,一旦我有了它们,我不知道该怎么办。我试图弄清楚如何创建一个动态C#对象,我可以将其序列化为JSON并将其放入视图中。我错过了什么?我觉得有点卡住了。如果你愿意的话,你可以用匿名类型构建你想要的数据结构。假设您的“蓝图”存储在myBluePrints
中:
var toBeSerialized = myBlueprints
.GroupBy(bp => new {bp.Name, bp.Approach})
.Select(bpg => new
{
name = bpg.Key.Name,
approach = bpg.Key.Approach,
options = new
{
begin = bpg.Min(bp => bp.Value),
end = bpg.Max(bp => bp.Value)
}
});
也就是说,我认为构建它的最简单方法是只编写一个与选项
相对应的类,以及一个与数组中顶级blueprint对象相对应的类。换句话说,您试图避免的“大量模型类”(特别是两个)可能是解决此问题的最简单方法。我建议您必须执行以下操作
创建类
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; }
}
这样做可能是最好的办法。