Pregunta

He convertido mi Datatable a json cadena Use el siguiente método ...

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();
}

¿Es esto lo suficientemente justo o todavía hay margen para la optimización para que se ejecute más rápido ... cualquier sugerencia ...

¿Fue útil?

Solución

Pruebe lo siguiente

   <PublishingWebControls:RichImageField FieldName="InteralFieldName" runat="server"/>

Deberá tener lo siguiente en la parte superior de su diseño de página.

<%@ Register TagPrefix="PublishingWebControls" Namespace="Microsoft.SharePoint.Publishing.WebControls" Assembly="Microsoft.SharePoint.Publishing, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>

Cuando estaba tratando de descubrir cuál usar, usé SharePoint Designer.Implementar lo que tiene para su sitio de SharePoint, abra su diseño de página en SPD y Editar en el modo Avanzado, luego en la caja de herramientas en los campos de la página, debe ver sus campos Tipo de contenido.Al arrastrarlos en la página, verá cómo deben definirse.

Otros consejos

Bien puede haber formas de hacer que se ejecute más rápido, pero ¿tiene alguna indicación de que usted necesitar ¿Se ejecutará más rápido? ¿Tiene una buena razón para creer que este es un cuello de botella significativo en su código? Si es así, compare el código con algunos datos reales y perfile la rutina para resolver a dónde va el tiempo.

El carácter de comodín * solo se admite para la coincidencia de prefijo, "Wild *" no "* tarjeta".Le sugeriría que amplíe su enfoque para etiquetar sus documentos.Le sugeriría que use los metadatos de SharePoint para etiquetar sus documentos en lugar de simplemente crear un título.Por ejemplo, agregue un campo para el documento, el producto, la variante, el suplemento, la identificación, la educación y el idioma.Si usa columnas del sitio en SharePoint 2013, se convertirán en propiedades administradas para usted y luego puede realizar una búsqueda con KQL o Refinamiento.

Por ejemplo: Producto: "SuperThing2000" Variante: "B" ID="13580" Publicado> 01/08/2011

Hay varias formas de automatizar la extracción de los datos, un receptor de eventos podría ser enviado para resolverlo con mucha facilidad.

¿Por qué crees que necesita optimización? ¿Es realmente lento en algunos datos de datos? Simplemente serializaría datos con algo como Newton JSON Serializer, si es serializable.

Refactor Su código, use una herramienta como Resharper, JustCode, etc. para ordenarlo un poco. Extraiga métodos y use pruebas individuales (desarrollo de pruebas) para encontrar cuellos de botella en su código y luego ajustarlos.

Pero tu primer paso debería ser: ¡Refactor!

El problema con el código no es la velocidad, pero que no está limpia. He hecho algo de limpieza, pero probablemente podrías hacer aún más:

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();
}

Sugeriría una solución diferente, si está utilizando .NET 3.0 o 3.5

En lugar de hacer esto

  1. Convertir dataTable en XML
  2. Use XMLSerializer para convertir el XML en su objeto de dominio
  3. Uso de JavaScriptSerializer (System.web.extensions.dll) para serializar el objeto de dominio a la cadena JSON.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top