[XmlElement(ElementName = "SalesStageId", Form = XmlSchemaForm.None)]
public EntityIdentifier OpportunitySalesStageId { get; set; }
上面ElementName
是"SalesStageId"
方法名称是"OpportunitySalesStageId"
。
有没有办法通过包含上述方法的类的对象从元素名中找出方法名。
[XmlElement(ElementName = "SalesStageId", Form = XmlSchemaForm.None)]
public EntityIdentifier OpportunitySalesStageId { get; set; }
上面ElementName
是"SalesStageId"
方法名称是"OpportunitySalesStageId"
。
有没有办法通过包含上述方法的类的对象从元素名中找出方法名。
Type.GetProperties()
PropertyInfo
定义属性XmlElementAttribute
PropertyInfo.GetCustomAttribute
示例程序:
(使用 LINQ 和扩展方法进行了优化)
using System;
using System.Linq;
using System.Reflection;
using System.Xml.Schema;
using System.Xml.Serialization;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string propName = FindPropertyNameByXmlElementAttributeElementName(typeof (MyClass), "Foo");
Console.WriteLine(propName);
Console.ReadKey();
}
static string FindPropertyNameByXmlElementAttributeElementName(Type type, string elementName)
{
PropertyInfo propertyInfo =
type.GetProperties().SingleOrDefault(
prop => prop.HasAttributeWithValue<XmlElementAttribute>(
a => a.ElementName == elementName
)
);
if (propertyInfo == null)
{
return "NOT FOUND";
}
return propertyInfo.Name;
}
}
public static class PropertyInfoExtensions
{
public static bool HasAttributeWithValue<TAttribute>(this PropertyInfo pi, Func<TAttribute, bool> hasValue)
{
TAttribute attribute =
(TAttribute)pi.GetCustomAttributes(typeof(TAttribute), true).SingleOrDefault();
if (attribute == null)
{
return false;
}
return hasValue(attribute);
}
}
class MyClass
{
[XmlElement(ElementName = "Foo", Form = XmlSchemaForm.None)]
public string Rumplestiltskin { get; set; }
}
}