public static string ToJson(IDictionary<string, object> dictionary, string objectName = null)
{
if (!string.IsNullOrWhiteSpace(objectName))
objectName = "{{\"{0}\":".Fmt(objectName);
var stringBuilder = new StringBuilder(objectName);
for (var i = 0; i < dictionary.Count; i++)
{
var kvp = dictionary.ElementAt(i);
if (i == 0) stringBuilder.Append("{");
if (kvp.Value is IDictionary<string, object>)
{
stringBuilder.Append("\"{0}\":".Fmt(kvp.Key));
stringBuilder.Append(ToJson((IDictionary<string, object>)kvp.Value));
}
else if (kvp.Value is dynamic[])
{
stringBuilder.Append("\"{0}\":[".Fmt(kvp.Key));
foreach (var dyn in (dynamic[])kvp.Value)
{
stringBuilder.Append(ToJson(dyn));
}
stringBuilder.Append("],");
}
else
{
stringBuilder.Append("\"{0}\":{1}".Fmt(kvp.Key, JsonSerializer.SerializeToString(kvp.Value)));
stringBuilder.Append(i < dictionary.Count - 1 ? "," : "");
}
if (i == dictionary.Count - 1) stringBuilder.Append("}");
}
if (!string.IsNullOrWhiteSpace(objectName))
stringBuilder.Append("}");
return stringBuilder.ToString().Replace("}{", "},{").Replace("}\"", "},\"");
}