Escape-Zitat in C # für Javascript-Verbrauch
Habe ich eine ASP.Net web-handler, der die Ergebnisse einer Abfrage im JSON-format
public static String dt2JSON(DataTable dt)
{
String s = "{\"rows\":[";
if (dt.Rows.Count > 0)
{
foreach (DataRow dr in dt.Rows)
{
s += "{";
for (int i = 0; i < dr.Table.Columns.Count; i++)
{
s += "\"" + dr.Table.Columns[i].ToString() + "\":\"" + dr[i].ToString() + "\",";
}
s = s.Remove(s.Length - 1, 1);
s += "},";
}
s = s.Remove(s.Length - 1, 1);
}
s += "]}";
return s;
}
Das problem ist, dass manchmal die Daten zurückgegeben hat Zitate in es und ich brauchen würde, um javascript-escape-diese so, dass er korrekt erstellt haben, in ein js-Objekt. Ich brauche einen Weg zu finden, Zitate in meinen Daten (Angebote gibt es nicht jedes mal) und legen Sie eine " /" - Zeichen vor Ihnen.
Beispiel-Antwort-text (falsch):
{"rows":[{"id":"ABC123","length":"5""},
{"id":"DEF456","length":"1.35""},
{"id":"HIJ789","length":"36.25""}]}
Ich brauchen würde, um zu entkommen", so meine Antwort sollte sein:
{"rows":[{"id":"ABC123","length":"5\""},
{"id":"DEF456","length":"1.35\""},
{"id":"HIJ789","length":"36.25\""}]}
Auch, ich bin Recht neu in C# (Codierung im Allgemeinen wirklich) also, wenn etwas anderes in meinem code die dummen Blicke lassen Sie es mich wissen.
InformationsquelleAutor der Frage | 2009-04-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für .net 4.0 + wird standard
HttpUtility.JavaScriptStringEncode
Früheren west-wind beschriebene Lösung von Lone Coder ist zwar ganz nett
InformationsquelleAutor der Antwort Yauhen.F
Hier ist eine effiziente und robuste Methode, die ich gefunden habe in http://www.west-wind.com/weblog/posts/114530.aspx
InformationsquelleAutor der Antwort Lone Coder
Ich denke, man sollte eher schauen, die JavaScriptSerializer Klasse. Es ist viel mehr stabil und korrekt behandelt jede Art von Daten-oder escape-Zeichen usw. Auch, dein code sieht viel sauberer.
In Ihrem Fall Ihre Klasse kann wie folgt Aussehen:
Diese Methode gibt eine richtig serialisierte json-string... Zum Beispiel, sth wie diese:
Spaß haben! 🙂
InformationsquelleAutor der Antwort Artiom Chilaru
Korrekt zu entkommen, ein string-literal für Javascript, die Sie zunächst entkommen, alle backslash-Zeichen, dann entfliehen Sie dem Anführungszeichen oder Apostrophe, wenn Sie Sie als string-Begrenzungszeichen).
So, was Sie brauchen, ist:
Was springt für mich ist, dass Sie mit der Verkettung von Strings in einer Schleife. Das ist schlecht, wie es skaliert sehr schlecht. Der + = - operator nicht hinzufügen von Zeichen am Ende der vorhandenen Zeichenfolge (strings sind unveränderlich und können nicht verändert werden), sondern es kopiert die Zeichenfolge und die zusätzlichen Zeichen zu einem neuen string. So kopieren Sie mehr und mehr Daten zu jeder Zeit, eEvery zusätzliche Zeile ungefähr verdoppelt die Laufzeit der Methode. Verwenden Sie ein StringBuilder-Objekt zu erstellen Sie die Zeichenfolge statt.
Verwenden Sie die
ColumnName
- Eigenschaft, um den Namen einer Spalte, anstatt dieToString
Methode. DieToString
Methode gibt dieExpression
- Eigenschaft Wert, wenn er gesetzt ist, nur wenn das nicht gesetzt ist funktioniert es wieder derColumnName
Eigenschaft.InformationsquelleAutor der Antwort Guffa
InformationsquelleAutor der Antwort Kirtan
Nicht warum Sie gerade dies tun:
InformationsquelleAutor der Antwort Kon
Funktioniert, wenn ich nach senden-string aus der C# - html-tag.
InformationsquelleAutor der Antwort Sergio Cabral
Nun, für Vorspeisen Sie benötigen keine Anführungszeichen um den Schlüssel.
Aber wenn Sie wollen, behalten Sie die doppelte Anführungszeichen, einfache Anführungszeichen funktioniert auf die gleiche Weise wie die doppelten Anführungszeichen tun in JS
Sonst könnten Sie tun,
InformationsquelleAutor der Antwort Chad Grant