Как вернуть null через Type.GetValue(object)
В общем, у меня есть метод, который сериализует объект какого то класса и возвращает json-строку. Но при попытке взять свойство, значение которого равняется null, мой метод не пишет ничего. Ниже сам код:
public string Serialize(object obj)
{
List<string> props = new List<string>();
Type type = obj.GetType();
foreach (PropertyInfo elem in type.GetProperties())
{
string currentPropertyFormat = $"\u0022{elem.Name}\u0022:{elem.GetValue(obj)}";
props.Add(currentPropertyFormat);
}
string jsonString = "";
for (int i = 0; i < props.Count; i++)
{
jsonString += props[i];
if (i != props.Count - 1)
jsonString += ",";
}
return "{" + jsonString + "}";
}
Ответы (1 шт):
Автор решения: aepot
→ Ссылка
using System.Text.Json;
JsonSerializer.Serialize(obj);
Велосипед уже изобретен, можно сразу ехать.
А так починить достаточно просто
elem.GetValue(obj) ?? "null"
Как взять в кавычки, если строка
object value = elem.GetValue(obj);
string textValue = value is string text ? $"\"{text.Replace("\"", "\\\"")}\"" : $"{value ?? "null"}";
string currentPropertyFormat = $"\"{elem.Name}\":{textValue}";
Вы только не учли, а что если этот value - класс или массив? Тогда его надо будет сериализовать соответственно как {...} или [...]. То есть я подозреваю, что нужен рекурсивный алгоритм, либо конечный автомат.