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

时间:2015-07-25 06:33:08

标签: c# json asp.net-mvc-4 json.net

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

PBKDF2

我想要它:

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

    [
        {
          "Code": "1",
          "Name": "ASSETS"
        },
        {
          "Code": "2",
          "Name": "LIABILITIES"
        },
        {
          "Code": "3",
          "Name": "CAPITAL"
        },
        {
          "Code": "4",
          "Name": "REVENUE"
        }
    ]
    
  2. 当我尝试第一个循环100个条目时,返回文件大约需要60秒。

3 个答案:

答案 0 :(得分:0)

尝试:

    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毫秒。

答案 1 :(得分:0)

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

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秒的时间内完成

答案 2 :(得分:0)

通过使用匿名类型对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);

10万件物品花了我319毫秒。