从数据库中的2个字符串创建JSON(延迟和格式问题)

本文关键字:延迟 格式 问题 JSON 创建 数据库 2个 字符串 | 更新日期: 2023-09-27 18:04:40

我从数据库的2列创建了MVC应用程序中的JArray JSON文件。但有两个问题:1. 文件的格式。每个对象都有额外的括号。

[
  [
    {
      "Code": "1",
      "Name": "ASSETS"
    }
  ],
  [
    {
      "Code": "2",
      "Name": "LIABILITIES"
    }
  ],
  [
    {
      "Code": "3",
      "Name": "CAPITAL"
    }
  ],
  [
    {
      "Code": "4",
      "Name": "REVENUE"
    }
  ]
]

我希望它是:

[
    {
      "Code": "1",
      "Name": "ASSETS"
    },
    {
      "Code": "2",
      "Name": "LIABILITIES"
    },
    {
      "Code": "3",
      "Name": "CAPITAL"
    },
    {
      "Code": "4",
      "Name": "REVENUE"
    }
]
  • 我已经从数据库加载了JArray中的值,然后将其添加到另一个JArray中。我用了2个for循环。1用于为5000个条目创建JArray。第二个用于从Database返回下一个有效主键。但问题是,处理循环并返回JSON文件需要15分钟以上的时间。为什么会有这么多的延迟?我怎样才能快一点。下面是代码。Int idd =0;JArray = new JArray();

        for (int b = 0; b<5000; b++)
        {
            idd = dbid(idd);
            IEnumerable<MST> accList = new List<MST>
            {
                new MST
                {
                    S1 = db.MSTs.Find(idd).S1,
                    S2 = db.MSTs.Find(idd).S2
                }
            };
            JArray Arrayone = new JArray(
                accList.Select(p => new JObject
                            {
                                { "Code", p.S1 },
                                { "Name", p.S2 },
                            })
                );
            Array.Add(Arrayone);
        }
        string jsonfile = JsonConvert.SerializeObject(Array,Formatting.Indented);
        string path = @"C:'Users'Awais'Desktop'accounts.json";
        System.IO.File.WriteAllText(path, jsonfile);
        return View(v);
    }
    public int dbid(int id)
    {
        decimal i = db.MSTs.Max(a => a.N100);
        MST m = new MST();
        for (; id <= i; id++)
        {
            m = db.MSTs.Find(++id);
            if (m == null)
                continue;
            else
            {
                break; 
            }
        }
        return id;
    }
    
  • 当我为100个条目尝试第一个循环时,它花了大约60秒返回文件。

    从数据库中的2个字符串创建JSON(延迟和格式问题)

    通过使用匿名类型建模JSON,您可以这样做:

    var array = (from coa in db.MSTs
                 select new { Code = coa.S2, Name = coa.S1 }).ToArray();
    string jsonfile = JsonConvert.SerializeObject(array, Formatting.Indented);
    string path = @"C:'Users'Awais'Desktop'accounts.json";
    System.IO.File.WriteAllText(path, jsonfile);
    

    尝试:

        public class RootObject
        {
            public string Code { get; set; }
            public string Name { get; set; }
        }
        var o = new List<RootObject>();
        for (var i = 0; i < 100; ++i)
        {
           o.Add(new RootObject
           {
              Code = "foo",
              Name = "bar"
           });
        }
       var v = JsonConvert.SerializeObject(o);
    

    我的列表到Serialize花了大约274毫秒

    我已经删除了所有循环,而是尝试在查询中解决它并制作单个数组。

    var k = (from coa in db.MSTs
                           select new { S2 = coa.S2, S1 = coa.S1 }).ToList().
                           Select(x => new MST { S2 = x.S2, S1 = x.S1 }).ToList();
                    JArray Arrayone = new JArray(
                        k.Select(p => new JObject
                                    {
                                        { "Code", p.S1 },
                                        { "Name", p.S2 },
                                    })
                        );
                string jsonfile = JsonConvert.SerializeObject(Arrayone,Formatting.Indented);
                string path = @"C:'Users'Awais'Desktop'accounts.json";
                System.IO.File.WriteAllText(path, jsonfile);
    

    它解决了两个问题。即括号格式问题和延迟。现在有了这段代码,它可以在不到5秒的时间内工作