В настоящее время я пытаюсь создать свой собственный метод сериализации JSON, но у меня возникает проблема с массивами, когда я вызываю свой метод "сериализации", который вызывается так:
string person = MyJsonConverter.Serialize(new Clerk("Alexander", 1999, new List<string> { "Computer Science", "Web Developer" }));
Console.WriteLine(person);
, который производит следующее:
{"Skills": ["Capacity": "4", "Count": "2"], "Name": "Alexander", "YearOfBirth": "1999"}
Но должно произойти это:
{"Skills": ["Computer Science", "Web Developer"], "Name": "Alexander", "YearOfBirth": "1999"}
Вопрос, с которым мне нужна помощь, заключается в следующем, я не совсем уверен, что я делаю неправильно, но по какой-то причине он принимает свойства массива, а не значения массива.
public static string Serialize(object obj)
{
StringBuilder stringBuilder = new StringBuilder();
IEnumerable<PropertyInfo> properties = obj.GetType().GetProperties().Where(p => p.GetIndexParameters().Length == 0);
if (typeof(IEnumerable).IsAssignableFrom(obj.GetType()))
stringBuilder.Append($"[");
else
stringBuilder.Append($"{{");
foreach (var property in properties)
if (property.PropertyType.IsPrimitive || property.PropertyType == typeof(string))
stringBuilder.Append($"\"{property.Name}\": \"{property.GetValue(obj)}\", ");
else
stringBuilder.Append($"\"{property.Name}\": {Serialize(property.GetValue(obj))}, ");
string temp = stringBuilder.ToString().Trim().Remove(stringBuilder.ToString().Length - 2);
stringBuilder.Clear();
stringBuilder.Append(temp);
if (typeof(IEnumerable).IsAssignableFrom(obj.GetType()))
stringBuilder.Append($"]");
else
stringBuilder.Append($"}}");
return stringBuilder.ToString();
}
Вся помощь очень приветствуется.