c# - 将动态 C# 对象序列化为 JSON

标签 c# asp.net-mvc razor

我有一个 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 显示了两种不同的结构:curvedstraight。我还会有更多。因此,我试图找出一种动态方法,而无需创建大量模型类。目前,我有以下内容:

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 集的 beginend 值。然而,一旦我拥有它们,我不知道如何处理它们。我试图弄清楚如何创建一个动态 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/

相关文章:

c# - 从 View 将字符串传递给 Controller ​​/操作

c# - 操作链接(如果已授权)

c# - 使用元组列表 : calculating number of items

c# - ASP MVC 和 postgres

.net - 重定向时将数组或字符串列表从一个操作传递到另一个操作

asp.net-mvc - OWIN - Authentication.SignOut() 不会删除 cookie

razor - 使用 Identity UI 作为库在 ASP.NET Core 2.1 中授权注册页面

c# - 截断表 C# 找不到表 - 不存在或没有权限

c# - 无法从 WP 8.1 中的音乐文件或文件夹中检索专辑封面

asp.net-mvc - 具有持久 HTTP 连接的 IDbConnection 生命周期管理