A JSON Serializer
by in CodeSOD on 2025-10-09Carol sends us today's nasty bit of code. It does the thing you should never do: serializes by string munging.
public string ToJSON()
{
double unixTimestamp = ConvertToMillisecondsSinceEpoch(time);
string JSONString = "{\"type\":\"" + type + "\",\"data\":{";
foreach (string key in dataDict.Keys)
{
string value = dataDict[key].ToString();
string valueJSONString;
double valueNumber;
bool valueBool;
if (value.Length > 2 && value[0].Equals('(') && value[value.Length - 1].Equals(')')) //tuples
{
char[] charArray = value.ToCharArray();
charArray[0] = '[';
charArray[charArray.Length - 1] = ']';
if (charArray[charArray.Length - 2].Equals(','))
charArray[charArray.Length - 2] = ' ';
valueJSONString = new string(charArray);
}
else if ((value.Length > 1 && value[0].Equals('{') && value[value.Length - 1].Equals('}')) ||
(double.TryParse(value, out valueNumber))) //embedded json or numbers
{
valueJSONString = value;
}
else if (bool.TryParse(value, out valueBool)) //bools
{
valueJSONString = value.ToLower();
}
else //everything else is a string
{
valueJSONString = "\"" + value + "\"";
}
JSONString = JSONString + "\"" + key + "\":" + valueJSONString + ",";
}
if (dataDict.Count > 0) JSONString = JSONString.Substring(0, JSONString.Length - 1);
JSONString = JSONString + "},\"time\":" + unixTimestamp.ToString() + "}";
return JSONString;
}