質問
私は自分の変換しました 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サイトに必要なものをデプロイし、詳細モードで編集してから、[ページ]フィールドに[ツールボックス]フィールドに表示されます。それらをページにドラッグすることで、定義方法が表示されます。
他のヒント
より速く実行する方法があるかもしれません - しかし、あなたはあなたが 必要 より速く実行するために?これがあなたのコードの重要なボトルネックであると信じる正当な理由はありますか?もしそうなら、コードを実際のデータでベンチマークし、時間がどこに向かっているのかを解決するためのルーチンをプロファイルします。
*ワイルドカード文字は、「wild *」ではなく「*カード」ではなく、プレフィックスのマッチングでのみサポートされています。あなたの文書のタグ付けのためのあなたのアプローチを拡大することをお勧めします。タイトルを作成するだけでなく、文書にタグを付けるためにSharePointメタデータを使用することをお勧めします。たとえば、ドキュメント、製品、バリアント、補足、ID、PublishedDate、およびLanguageのフィールドを追加します。SharePoint 2013でサイト列を使用する場合、それらはあなたのために管理されたプロパティに変換され、KQLまたはRailiningを使用して検索を実行することができます。
:製品: "superthing2000"バリアント: "b" id="13580" PublishedDate> 08/01/2011
データの抽出を自動化する方法はいくつかあり、イベント受信機はこの非常に簡単に解決するためにWritteになることができます。
なぜ最適化が必要だと思いますか?一部のデータテーブルでは本当に遅いですか? Newton JSON SerializerのようなものでDatatableをシリアル化するだけで、シリアル化可能であれば。
リファクタリング コードは、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文字列にシリアル化します。