简体   繁体   中英

How to get a property value of a class defined inside of another class through a reflection

I have a MerchantWSBO and MerchantWSVO classes.

MerchantWSBO has a property of a type of MerchantWSVO .

I need to get a value of the property of a MerchantWSVO .

So, I have a code defining both classes(classes are coming through a WebReference from a 3rd party)

public MerchantWSBO {

       private MerchantWSVO overviewField;

        [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
        public MerchantWSVO overview {
            get {
                return this.overviewField;
            }
            set {
                this.overviewField = value;
            }
        }

}

public MerchantWSVO{

        private System.Nullable<bool> discoverRetainedField;

        [System.Xml.Serialization.XmlIgnoreAttribute()]
        public bool discoverRetainedSpecified {
            get {
                return this.discoverRetainedFieldSpecified;
            }
            set {
                this.discoverRetainedFieldSpecified = value;
            }
        }
}

I have the following method where I need to get the property value of dicoverRetained using reflection:

    private string ClassToXML(Object classObject)
    {

        MerchantTest mt = new MerchantTest();

        if(classObject is MerchantWSBO)
        {
         classObject.GetType().GetProperty("overviewField").GetValue(new MerchantWSVO, null);
            mt.overview.discoverRetained = //need to get the value
        }
        

        var myString = new System.IO.StringWriter();

        var serializer = new XmlSerializer(classObject.GetType());
        serializer.Serialize(myString, classObject);

        return myString.ToString();
        
    }

Based on a parameter classObject which in this case can be of two types, I need to get a value from a property.

How can I do that?

You don't need reflection at all, simply cast the object to the correct type. Pattern matching helps here.

if(classObject is MerchantWSBO wsbo)
{
    Console.WriteLine(wsbo.overview.discoverRetained);
}

or on older C# versions:

var wsbo = classObject as MerchantWSBO;
if(wsbo != null)
{
    Console.WriteLine(wsbo.overview.discoverRetained);
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM