Путь с свойству с помощью рефлексии C#

136
11 ноября 2019, 02:10

Есть массив объектов:

ist<product_description> product_descriptions = new List<product_description>();
        product_descriptions.Add(new product_description());
        product_descriptions.Add(new product_description());
        product_descriptions.Add(new product_description());

И собственно сам объект:

public class product_description
{
    public string name { get; set; }
    public string description { get; set; }
    public string meta_title { get; set; }
    public string meta_description { get; set; }
}

Никак не могу прийти к решению как с помощью рефлексии получить путь к свойствам в таком формате:

product_description[0][name]
product_description[0][description]
product_description[0][meta_title]
product_description[0][meta_description]
product_description[1][name]
product_description[1][description]
product_description[1][meta_title]
product_description[1][meta_description]
product_description[2][name]
product_description[2][description]
product_description[2][meta_title]
product_description[2][meta_description]
Answer 1

Получаем названия свойств, получаем название типа, выводим на экран

List<product_description> product_descriptions = new List<product_description>();
product_descriptions.Add(new product_description());
product_descriptions.Add(new product_description());
product_descriptions.Add(new product_description());
var props = typeof(product_description).GetProperties()
    .Select(x => x.Name)        
    .ToArray();
var typename = nameof(product_description);
for (var i = 0; i < product_descriptions.Count; i++)
    foreach (var p in props)
        Console.WriteLine($"{typename}[{i}][{p}]");

Результат

product_description[0][name]
product_description[0][description]
product_description[0][meta_title]
product_description[0][meta_description]
product_description[1][name]
product_description[1][description]
product_description[1][meta_title]
product_description[1][meta_description]
product_description[2][name]
product_description[2][description]
product_description[2][meta_title]
product_description[2][meta_description]    
Answer 2
using System;
using System.Collections.Generic;
using System.Linq;
public class product_description
{
    public string name { get; set; }
    public string description { get; set; }
    public string meta_title { get; set; }
    public string meta_description { get; set; }
}
public class Program
{
    public static void Main()
    {
        List<product_description> product_descriptions = new List<product_description>();
        product_descriptions.Add(new product_description(){
            name = "name0",
            description = "description0",
            meta_title = "meta_title0",
            meta_description = "meta_description0"
        });
        product_descriptions.Add(new product_description(){
            name = "name1",
            description = "description1",
            meta_title = "meta_title1",
            meta_description = "meta_description1"
        });
        product_descriptions.Add(new product_description(){
            name = "name2",
            description = "description2",
            meta_title = "meta_title2",
            meta_description = "meta_description2"
        });
        var props = typeof(product_description).GetProperties().ToArray();
        for (var i = 0; i < product_descriptions.Count; i++)
        {
            foreach (var p in props)
            {
                Console.WriteLine(p.GetValue(product_descriptions[i]));
            }
        }       
    }
}
READ ALSO
Быстрый Resize Bitmap C#

Быстрый Resize Bitmap C#

камрады!

132
Вывод всех элементов XElements

Вывод всех элементов XElements

Имею XML с сложной структурой (CommerceML) и нужно выпарсить некоторые значения оттуда

123
Roslyn ошибка сборки System.Runtime

Roslyn ошибка сборки System.Runtime

Коллеги, добрый день!

119