示例#1
0
        private static void EvaluateProperties(BaseDocument document, XPath root, object obj)
        {
            foreach (PropertyInfo property in obj.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public))
            {
                XPath xpath = XPathForProperty(root, property);

                if (property.PropertyType.GetInterfaces().Any(t => t == typeof(INode)))
                {
                    var node = Activator.CreateInstance(property.PropertyType);
                    EvaluateProperties(document, xpath, node);
                    property.SetValue(obj, node);
                }
                else
                {
                    var value = document.Evaluate(xpath, property.PropertyType)
                                ?? document.Evaluate(xpath.ToCamelCase(), property.PropertyType);
                    property.SetValue(obj, value);
                }
            }
        }