【发布时间】:2018-01-30 09:45:52
【问题描述】:
我想统计列表中的所有字符,看看我是否超过 MaxJsonLength 的最大值。
这是我的控制器,我有一个产品列表。
public JsonResult GetAllProducts()
{
List<ProductNew> allProducts = new List<ProductNew>();
var shopIdOfTheDay = 2;
allProducts = _db.Products
.Where(p => p.Category.ShopId == shopIdOfTheDay && p.Availability)
.OrderBy(p => p.Description)
.ToList();
//count the characters in the list here
int total = 0;
foreach (var value in allProducts)
{
string s = value.ToString();
int i;
i = s.Length;
total = total += i;
Console.WriteLine(total);
}
return new JsonResult { Data = allProducts, JsonRequestBehavior = JsonRequestBehavior.AllowGet };
}
但是 foreach 循环不起作用,因为每个字符串值都是 109 个字符长,而且这是不对的。
如果我打破value.ToString 看到该值为+
{System.Data.Entity.DynamicProxies.ProductNew_7F6B12BDD7841029155EF84C6372688579A97D5AA4EA2378712AC64A67B25290} SeashellBrawlCorvee.Models.ProductNew {System.Data.Entity.DynamicProxies.ProductNew_7F6B12BDD7841029155EF84C6372688579A97D5AA4EA2378712AC64A67B25290}
所以这是不对的。 value 中有多个值,所以我为什么不能将它转换为 String?
我尝试做一个额外的 foreach。喜欢:
foreach (var value2 in value) {
string s1 = value2.ToString();
int i1;
i1 = s2.Length;
total = total += i1;
Console.WriteLine(total);
}
类似这样的东西,但那不起作用,因为我收到一个错误:foreach statement cannot operate on vairables of type 'PRoductNew'because 'ProductNew' does not contain a public definition for 'GetEnumerator'
那该怎么办?
【问题讨论】:
-
断点这一行 value.ToString(),你会明白为什么它是一个恒定的长度,这可能不是你想象的那样
-
为什么你首先检查
MaxJsonLength?如果你真的想返回超过 4MB 的数据,只需增加该值即可。如果要限制发回的数据量,请在数据库级别使用基于记录数的分页。从数据库中加载 100K 行并丢弃其中的 90K 并没有多大意义。 -
您有一个
ProductNew对象列表。你认为在ProductNew的实例上调用ToString()会产生什么结果?你为什么这么想?你有没有付出任何努力来实际单步执行代码并查看ToString()方法实际返回的内容? -
感谢您的回复。在我完成一半之前,我不小心发布了我的任务。我刚刚更新了它。
-
无论如何这是一个 X Y 类问题 meta.stackexchange.com/questions/66377/what-is-the-xy-problem ,你正在用错误的解决方案解决错误的问题。