题
我converted依了我的 Datatable
至 json
字符串使用以下方法...
public string GetJSONString(DataTable Dt)
{
string[] StrDc = new string[Dt.Columns.Count];
string HeadStr = string.Empty;
for (int i = 0; i < Dt.Columns.Count; i++)
{
StrDc[i] = Dt.Columns[i].Caption;
HeadStr += "\"" + StrDc[i] + "\" : \"" + StrDc[i] + i.ToString() + "¾" + "\",";
}
HeadStr = HeadStr.Substring(0, HeadStr.Length - 1);
StringBuilder Sb = new StringBuilder();
Sb.Append("{\"" + Dt.TableName + "\" : [");
for (int i = 0; i < Dt.Rows.Count; i++)
{
string TempStr = HeadStr;
Sb.Append("{");
for (int j = 0; j < Dt.Columns.Count; j++)
{
if (Dt.Rows[i][j].ToString().Contains("'") == true)
{
Dt.Rows[i][j] = Dt.Rows[i][j].ToString().Replace("'", "");
}
TempStr = TempStr.Replace(Dt.Columns[j] + j.ToString() + "¾", Dt.Rows[i][j].ToString());
}
Sb.Append(TempStr + "},");
}
Sb = new StringBuilder(Sb.ToString().Substring(0, Sb.ToString().Length - 1));
Sb.Append("]}");
return Sb.ToString();
}
这是足够公平的还是仍然有优化的保证金以使其更快地执行。...任何建议...
解决方案
尝试以下
<PublishingWebControls:RichImageField FieldName="InteralFieldName" runat="server"/>
.
您需要在页面布局的顶部有以下内容。
<%@ Register TagPrefix="PublishingWebControls" Namespace="Microsoft.SharePoint.Publishing.WebControls" Assembly="Microsoft.SharePoint.Publishing, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
.
当我试图发现使用哪一个时,我使用了SharePoint Designer。将您的SharePoint站点部署到SharePoint站点,在SPD中打开页面布局并在高级模式下编辑,然后在Page字段下的工具箱中,您应该看到内容类型字段。通过在页面上拖动它们,您将看到应如何定义它们。
其他提示
可能有一些方法可以使其更快地执行 - 但是您是否有任何迹象表明您 需要 它要更快地执行?您是否有充分的理由相信这是您的代码中的重要瓶颈?如果是这样,请用一些真实的数据对代码进行基准测试,并介绍程序以确定时间到达的位置。
*通配符只支持前缀匹配,“wild *”而不是“*卡”。我建议您扩展您的方法来标记您的文件。我建议您使用SharePoint元数据来标记您的文档,而不是仅创建标题。例如,为文档,产品,变体,补充,ID,发布和语言添加一个字段。如果在SharePoint 2013中使用网站列,则它们将为您转换为托管属性,然后您可以使用KQL或细化执行搜索。
例如:产品:“超级+2000”变体:“B”ID=“13580”出版物> 08/01/2011
有几种方法可以自动化数据的提取,事件接收器可以很容易地解决这个问题。
您为什么认为它需要优化?在某些数据表上真的很慢吗?如果它完全可以序列化,我只是将DataTable序列化与Newton JSON Serializer之类的内容。
重构 您的代码,使用Resharper,JustCode等工具对其进行整理。提取方法并使用单个测试(测试驱动的开发形式)在您的代码中查找瓶颈,然后调整这些瓶颈。
但是您的第一步应该是: 重构!
代码的问题不是速度,但没有清理。我已经进行了一些清理工作,但是您可能会做更多的事情:
public string GetJSONString2(DataTable table)
{
StringBuilder headStrBuilder = new StringBuilder(table.Columns.Count * 5); //pre-allocate some space, default is 16 bytes
for (int i = 0; i < table.Columns.Count; i++)
{
headStrBuilder.AppendFormat("\"{0}\" : \"{0}{1}¾\",", table.Columns[i].Caption, i);
}
headStrBuilder.Remove(headStrBuilder.Length - 1, 1); // trim away last ,
StringBuilder sb = new StringBuilder(table.Rows.Count * 5); //pre-allocate some space
sb.Append("{\"");
sb.Append(table.TableName);
sb.Append("\" : [");
for (int i = 0; i < table.Rows.Count; i++)
{
string tempStr = headStrBuilder.ToString();
sb.Append("{");
for (int j = 0; j < table.Columns.Count; j++)
{
table.Rows[i][j] = table.Rows[i][j].ToString().Replace("'", "");
tempStr = tempStr.Replace(table.Columns[j] + j.ToString() + "¾", table.Rows[i][j].ToString());
}
sb.Append(tempStr + "},");
}
sb.Remove(sb.Length - 1, 1); // trim last ,
sb.Append("]}");
return sb.ToString();
}
如果您使用的是.NET 3.0或3.5,我建议使用不同的解决方案
而不是这样做
- 将数据转换为XML
- 使用XMLSerializer将XML转换为您的域对象
- 使用JavaScriptSerializer(System.web.extensions.dll)序列化域对象为JSON String。