Home > Software design >  How can i get the name of property and value from object and pass this name and value to a list in c
How can i get the name of property and value from object and pass this name and value to a list in c

Time:06-25

I want to get the property name and the value from object and pass them to the list. i dont want to pass one by one property and value to the list like commented in my code. want to use loop and add name and value dynamically

public class ParametersList
{
    public string Name { get; set; }
    public dynamic Value { get; set; }
}
 public class BookVM
{
    
  public string AuthorName{ get; set; }
   
    public string CoverUrl { get; set; }

    public int AuthorIds { get; set; }

}

public List<Book> Addgetallbooks(BookVM BookVM)
    {
        List<ParametersList> obj = new List<ParametersList>();
       
        //List<ParametersList> obj = new List<ParametersList>
        //{
        //    new ParametersList{Name=nameof(BookVM.AuthorIds),Value=BookVM.AuthorIds},
        //    new ParametersList{Name=nameof(BookVM.AuthorName),Value=BookVM.AuthorName},
        //    new ParametersList{Name=nameof(BookVM.CoverUrl),Value=BookVM.CoverUrl}
        //};
        var getdata = _opr.GetBooks1(obj);
        return getdata;
    }

CodePudding user response:

You need to use reflection, but not sure if you should do it :)

[TestMethod]
public void Foo()
{
    var book = new BookVM() { AuthorIds = 1, AuthorName = "some name", CoverUrl = "some cover url" };
    var result = GetParameters(book);
    result.Should().BeEquivalentTo(new[]
    {
        new ParametersList { Name = nameof(BookVM.AuthorIds), Value = 1 },
        new ParametersList() { Name = nameof(BookVM.AuthorName), Value = "some name" },
        new ParametersList { Name = nameof(BookVM.CoverUrl), Value = "some cover url" }
    });
}

private static List<ParametersList> GetParameters(BookVM book)
{
    return typeof(BookVM).GetProperties().Select(p => new ParametersList
    {
        Name = p.Name, Value = p.GetValue(book)
    }).ToList();
}
  • Related