我converted依了我的 Datatablejson 字符串使用以下方法...

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,我建议使用不同的解决方案

而不是这样做

  1. 将数据转换为XML
  2. 使用XMLSerializer将XML转换为您的域对象
  3. 使用JavaScriptSerializer(System.web.extensions.dll)序列化域对象为JSON String。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top