Index: binary-improvements/7dtd-server-fixes/src/JSON/JSONNode.cs
===================================================================
--- binary-improvements/7dtd-server-fixes/src/JSON/JSONNode.cs	(revision 154)
+++ binary-improvements/7dtd-server-fixes/src/JSON/JSONNode.cs	(revision 160)
@@ -5,5 +5,5 @@
 	public abstract class JSONNode
 	{
-		public abstract string ToString();
+		public abstract override string ToString();
 	}
 }
Index: binary-improvements/7dtd-server-fixes/src/JSON/JSONString.cs
===================================================================
--- binary-improvements/7dtd-server-fixes/src/JSON/JSONString.cs	(revision 154)
+++ binary-improvements/7dtd-server-fixes/src/JSON/JSONString.cs	(revision 160)
@@ -1,3 +1,4 @@
 using System;
+using System.Text;
 
 namespace AllocsFixes.JSON
@@ -14,5 +15,48 @@
 		public override string ToString ()
 		{
-			return string.Format ("\"{0}\"", value);
+			if (value == null || value.Length == 0) {
+				return "";
+			}
+
+			int len = value.Length;
+
+			StringBuilder sb = new StringBuilder (len + 4);
+			String t;
+
+			foreach (char c in value) {
+				switch (c) {
+					case '\\':
+					case '"':
+					case '/':
+						sb.Append ('\\');
+						sb.Append (c);
+						break;
+					case '\b':
+						sb.Append ("\\b");
+						break;
+					case '\t':
+						sb.Append ("\\t");
+						break;
+					case '\n':
+						sb.Append ("\\n");
+						break;
+					case '\f':
+						sb.Append ("\\f");
+						break;
+					case '\r':
+						sb.Append ("\\r");
+						break;
+					default:
+						if (c < ' ') {
+							t = "000" + String.Format ("X", c);
+							sb.Append ("\\u" + t.Substring (t.Length - 4));
+						} else {
+							sb.Append (c);
+						}
+						break;
+				}
+			}
+
+			return string.Format ("\"{0}\"", sb.ToString ());
 		}
 
