Учтите, что у меня есть значения ниже в раскрывающемся списке (переменная dropDownList), а значения, выбранные пользователем, находятся в списке selectedDropDownValues.
А DB api возвращает список клиентов (переменная customerDBList).
Теперь требуется построить JSON из выбранных значений, как указано ниже -
var dropDownList = new[] { "Customer.Id", "Customer.FirstName", "Customer.LastName", "Customer.Address.AddressLine1", "Customer.Address.AddressLine2" };
var selectedDropDownValues = new[] { "Customer.Id", "Customer.FirstName", "Customer.Address.AddressLine1" };
var customerDBList = new List<Customer>(){
new Customer {
Id=1,
FirstName = "John",
LastName = "Desouza",
Address=new Address{
AddressLine1 = "1 Street",
AddressLine2 = "Linking Road"
}},
new Customer {
Id=2,
FirstName = "Sam",
LastName = "Lewis",
Address=new Address{
AddressLine1 = "Fedral Highway",
AddressLine2 = "Louisville"
}
}};
Ожидаемый вывод JSON как -
[
{
"Customer": {
"Id": 1,
"FirstName": "John",
"Address": {
"AddressLine1": "1 Street"
}
}
},
{
"Customer": {
"Id": 2,
"FirstName": "Sam",
"Address": {
"AddressLine1": "Fedral Highway"
}
}
}
]
Нет Я хочу согласно выбранным значениям в selectedDropDownValues
Я обновил JSON.





Так получилось, что ваши строки selectedDropDownValues"Customer.Address.AddressLine1" имеют синтаксис JSONPath, поэтому вы можете преобразовать ваши объекты Customer в промежуточный JObject, а затем с помощью JsonExtensions.RemoveAllExcept(this JObject obj, IEnumerable<string> paths) удалить ненужные значения из этот ответ в Как выполнить частичную сериализацию объекта с указанием «путей» с помощью Newtonsoft JSON.NET.
Обратите внимание, что желаемый JSON имеет дополнительный уровень вложенности { "Customer": { ... } }, которого нет в вашей модели данных, поэтому его нужно будет вручную вставить перед фильтрацией:
var rootName = "Customer";
var query = customerDBList
// Convert to JObject
.Select(c => JObject.FromObject(c))
// Add additional level of object nesting { "Customer": { ... } }
.Select(o => new JObject( new JProperty(rootName, o)))
// Remove all but selected properties.
.Select(o => o.RemoveAllExcept(selectedDropDownValues));
var json = JsonConvert.SerializeObject(query, Formatting.Indented);
Рабочий образец .Net fiddle здесь, который показывает, что сгенерированный JSON, при необходимости,
[
{
"Customer": {
"Id": 1,
"FirstName": "John",
"Address": {
"AddressLine1": "1 Street"
}
}
},
{
"Customer": {
"Id": 2,
"FirstName": "Sam",
"Address": {
"AddressLine1": "Fedral Highway"
}
}
}
]
Не могли бы вы уточнить, хотите ли вы соединить обе адресные строки вместе или нет? Ваш пример показывает это в обоих направлениях.