get Get property from ViewModel

I have one method for push class property into NameValuCollection

private NameValueCollection ObjectToCollection(object objects)
{

    NameValueCollection parameter = new NameValueCollection();


    Type type = objects.GetType();

    PropertyInfo[] properties = type.GetProperties(BindingFlags.Instance |
                                                    BindingFlags.DeclaredOnly |
                                                    BindingFlags.Public);
    foreach (PropertyInfo property in properties)
    {
        if (property.GetValue(objects, null) == null)
        {
            parameter.Add(property.Name.ToString(), "");
        }
        else
        {
            if (property.GetValue(objects, null).ToString() != "removeProp")
            {
                parameter.Add(property.Name.ToString(), property.GetValue(objects, null).ToString());
            }
        }
    }

    return parameter;
    }

in my case when I pass My Model class to this method it’s for correctly,but when in my Model class I use another Model like this

public class Brand
{
    public MetaTags MetaTag { get; set; } // <---- Problem is here

    public string BrandName { get; set; }

}

public class MetaTags
{
    public string Title { get; set; }

    public string Description { get; set; }

    public string Language { get; set; }
}

it’s not add MetaTags Class Property to the collection and just Add MetaTag to the collection

I want this method return this OutPut

key:Title       Value:value
key:Description Value:value
key:Language    Value:value
key:BrandName   Value:value

but this method return this

key:MetaTag     Value:
key:BrandName   Value:value

how i can do it ?
very thank for your help

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

Before adding a empty string, check whether the current property is MetaTags or not. If so, use this function recursively.

private NameValueCollection ObjectToCollection(object objects)
{

NameValueCollection parameter = new NameValueCollection();


Type type = objects.GetType();

PropertyInfo[] properties = type.GetProperties(BindingFlags.Instance |
                                                BindingFlags.DeclaredOnly |
                                                BindingFlags.Public);
foreach (PropertyInfo property in properties)
{
    if (property.PropertyType == typeof(MetaTags))
    {
            parameter.Add(property.Name.ToString(),ObjectToCollection(property.GetValue(objects, null)))
    }
    else{
    if (property.GetValue(objects, null) == null)
    {
        parameter.Add(property.Name.ToString(), "");
    }
    else
    {
        if (property.GetValue(objects, null).ToString() != "removeProp")
        {
            parameter.Add(property.Name.ToString(), property.GetValue(objects, null).ToString());
        }
    }
    }
}

return parameter;
}


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x