using System.Collections.Generic;
public static void Main(string[] args)
var person = new Person("John Doe", 30, true, new List<string> { "C#", "ASP.NET", "SQL" });
var serializer = new SimpleJSONSerializer();
string json = serializer.Serialize(person);
public string Name { get; set; }
public int Age { get; set; }
public bool IsEmployee { get; set; }
public List<string> Skills { get; set; }
public Person(string name, int age, bool isEmployee, List<string> skills)
public class SimpleJSONSerializer
public string Serialize(object obj)
StringBuilder json = new StringBuilder();
Type type = obj.GetType();
var properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach (var property in properties)
json.Append($"\"{property.Name}\": ");
var value = property.GetValue(obj);
json.Append(SerializeValue(value));
private string SerializeValue(object value)
Type valueType = value.GetType();
if (valueType == typeof(string))
return $"\"{EscapeString((string)value)}\"";
else if (valueType == typeof(bool))
return value.ToString().ToLower();
else if (valueType.IsPrimitive || value is decimal)
else if (value is IEnumerable<object> enumerable)
StringBuilder arrayJson = new StringBuilder();
foreach (var item in enumerable)
arrayJson.Append(SerializeValue(item));
return arrayJson.ToString();
private string EscapeString(string value)
StringBuilder escapedString = new StringBuilder();
foreach (char c in value)
if (c == '\\' || c == '"')
escapedString.Append('\\').Append(c);
return escapedString.ToString();