Вопрос

Я преобразовал свой 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, откройте макет страницы в SPD и отредактируйте в режиме «Расширенный режим», затем на панели инструментов «На панели инструментов» вы должны увидеть поля вашего типа содержимого.Перетаскивая их на страницу, вы увидите, как они должны быть определены.

Другие советы

Вполне могут быть способы заставить его выполнить быстрее - но есть ли у вас какие -либо признаки того, что вы необходимость это выполнять быстрее? У вас есть веская причина полагать, что это значительное узкое место в вашем коде? Если это так, сравните код с некоторыми реальными данными и профиляйте подпрограмму, чтобы выяснить, куда идет время.

Характер подстановочный знак * поддерживается только для соответствия префикса, «Wild *» не «* карта».Я бы предложил вам расширить свой подход для метки ваших документов.Я бы предложил вам использовать метаданные SharePoint, чтобы пометить ваши документы, а не просто создавать заголовок.Например, добавьте поле для документа, продукта, варианта, дополнения, идентификатора, опубликованногоdate и языка.Если вы используете столбцы сайта в SharePoint 2013, они будут преобразованы в управляемые свойства для вас, а затем вы можете выполнить поиск, используя KQL или Relizement.

Например: Product: «Superthing2000» вариант: «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.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top