У меня есть Person
класс:
public class Person
{
public string Name { get; set; }
public string Surname { get; set; }
public Address Address { get; set; }
}
public class Address
{
public string Line1 { get; set; }
public string Line2 { get; set; }
}
В качестве конечного результата я хотел бы распечатать экземпляр Person
в формате JSON, но я бы хотел, чтобы это была огромная строкапар ключ-значение, например:
"Name:John,Surname:Doe,Line1:Infinite Loop,Line2:California"
Обратите внимание, что в приведенном выше примере я избавился от фактических имен классов (т. е. он печатает Line1
вместо Address.Line1
) - меня волнует толькообо всех парах имя / значение.
Таким образом, конечным результатом будет массив Person
s:
"persons":[
"Name:John,Surname:Doe,Line1:Infinite Loop 1,Line2:California",
"Name:Jane,Surname:Doe,Line1:Infinite Loop 2,Line2:California"
]
В качестве отправной точки я попытался использовать отражение:
void Main()
{
var persons = new List<Person>();
persons.Add(new Person
{
Name = "John",
Surname = "Doe",
Address = new Address
{
Line1 = "Infinite Loop",
Line2 = "California"
}
});
foreach(var person in persons)
{
var properties = new List<string>();
foreach(var property in person.GetType().GetProperties())
{
properties.Add($"{property.Name}:{property.GetValue(person, null)}");
}
Console.WriteLine(string.Join(",", properties));
}
}
Но я получаю следующий вывод в LINQPad:
Name:John,Surname:Doe,Address:UserQuery+Address
Я предполагаю, что Address
не повторяется должным образом, потому что это вложенный объект в Person
.Тем не менее, это не выглядит как самый чистый / эффективный подход.