来自c#linq的json的父节点中的动态值 [英] dynamic value in parent node in json from c# linq

查看:42
本文介绍了来自c#linq的json的父节点中的动态值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要动态设置父节点的值我正在使用LINQ在数据表中获取结果你能帮忙吗?

I need to set the value of the parent node dynamically I am using LINQ to obtain result in the data table can you please help?

数据表数据.

    +-----------------+----------------------------------------+-----------+
    |       Key       |                 Value                  | filetype  |
    +-----------------+----------------------------------------+-----------+
    | Sorry           | UNDSKYLD!                              | Associate |
    | ValSpace        | Mellemrum er ikke tilladt              | Associate |
    | UpdtProfile_Sub | Актуализация на потребителски профил   | Emails    |
    | UplineMail_msg  | Моля, потвърдете Нивото на потребителя | Emails    |
    +-----------------+----------------------------------------+-----------+

我尝试过的.

        DataTable dt = fillDataTable();

        var result = from row in dt.AsEnumerable()
                     group row by row.Field<string>("filetype") into Group
                     let row = Group.First()
                     select new
                     {
                         filetype = Group.Select(row => new clsTranslation
                         {
                             Key = row.Field<string>(0),
                             Value = row.Field<string>(1),
                         }).ToDictionary(pair => pair.Key, pair => pair.Value)
                     };

        string newjson = JsonConvert.SerializeObject(result, Newtonsoft.Json.Formatting.Indented);

收到结果.

          {
            "filetype": {
              "Sorry": "UNDSKYLD! ",
              "ValSpace": "Mellemrum er ikke tilladt  ",
          },
              "filetype": {
              "UpdtProfile_Sub": "Актуализация на потребителски профил ",
              "UplineMail_msg": "Моля, потвърдете Нивото на потребителя",
          }

        }

预期结果.

          {
            "Associate": {
              "Sorry": "UNDSKYLD! ",
              "ValSpace": "Mellemrum er ikke tilladt  ",
          },
              "Emails": {
              "UpdtProfile_Sub": "Актуализация на потребителски профил ",
              "UplineMail_msg": "Моля, потвърдете Нивото на потребителя",
          }

        }

推荐答案

有两种方法.

  1. 更多通用JSON
  2. 根据您的要求

var dt = new DataTable();
    dt.Columns.AddRange(new DataColumn[] { new DataColumn("Key"), new DataColumn("Value"), new DataColumn("filetype") });
    dt.Rows.Add("Sorry", "UNDSKYLD!", "Associate");
    dt.Rows.Add("ValSpace", "Mellemrum er ikke tilladt", "Associate");
    dt.Rows.Add("UpdtProfile_Sub", "Актуализация на потребителски профил", "Emails");
    dt.Rows.Add("UplineMail_msg", "Моля, потвърдете Нивото на потребителя", "Emails");

通用方法

    var rez = dt.AsEnumerable()
                .GroupBy(gp => gp.Field<string>("filetype")).ToList()
                .Select(fe => new
                {
                    Type = fe.Key,
                    Data = fe.ToList().Select(ss => (ss.Field<string>("Key").ToString(), ss.Field<string>("Value")))
                });
                   //would be generic
    Console.Writeline(JsonConvert.SerializeObject(rez, Newtonsoft.Json.Formatting.Indented));

您要求的另一种方法

    JArray jArray = new JArray();
    dt.AsEnumerable()
        .GroupBy(gp => gp.Field<string>("filetype")).ToList()
        .ForEach(fe =>
        {
            var jo = new JObject();
            var test = JObject.FromObject(jo);
            fe.ToList().ForEach(e =>
            {
                test.Add(e.Field<string>("Key"), e.Field<string>("Value"));
            });
            jo.Add(fe.Key, test);
            jArray.Add(jo);
        });
    Console.WriteLine(JsonConvert.SerializeObject(jArray, Newtonsoft.Json.Formatting.Indented));

第一种方法结果:

[
  {
    "Type": "Associate",
    "Data": [
      {
        "Item1": "Sorry",
        "Item2": "UNDSKYLD!"
      },
      {
        "Item1": "ValSpace",
        "Item2": "Mellemrum er ikke tilladt"
      }
    ]
  },
  {
    "Type": "Emails",
    "Data": [
      {
        "Item1": "UpdtProfile_Sub",
        "Item2": "Актуализация на потребителски профил"
      },
      {
        "Item1": "UplineMail_msg",
        "Item2": "Моля, потвърдете Нивото на потребителя"
      }
    ]
  }
]

第二种方法结果:

[
  {
    "Associate": {
      "Sorry": "UNDSKYLD!",
      "ValSpace": "Mellemrum er ikke tilladt"
    }
  },
  {
    "Emails": {
      "UpdtProfile_Sub": "Актуализация на потребителски профил",
      "UplineMail_msg": "Моля, потвърдете Нивото на потребителя"
    }
  }
]

这篇关于来自c#linq的json的父节点中的动态值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆