我从数据库的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:UsersAwaisDesktopaccounts.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秒返回文件。
通过使用匿名类型建模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:UsersAwaisDesktopaccounts.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:UsersAwaisDesktopaccounts.json";
System.IO.File.WriteAllText(path, jsonfile);
它解决了两个问题。即括号格式问题和延迟。现在有了这段代码,它可以在不到5秒的时间内工作