XmlElement отражает

классы, подобные этим двум

[XmlRoot("Root")]
public class VcRead
{
    [XmlElement("item")]
    public string[] Items;

    [XmlElement("amount")]
    public int Count;
}

public class KeyItem
{
    [XmlAttribute("id")]
    public int ID;

    [XmlAttribute("name")]
    public string Title;
}

теперь, я хочу использовать отражение, чтобы получить все поля и их xml Mark. легко получить имена полей и их значения. но как получить значение XmlElement, например, «количество» в

[XmlElement("amount")]
public int Count;
1
nl ja de
Метод GetCustomAttributes типа PropertyInfo?
добавлено автор tschmit007, источник

2 ответы

Вместо XmlElement используйте XmlElementAttribute, как показано ниже.

[XmlElementAttribute("test")]
 public string Test  {get;set;};

Затем, Access GetProperties() этого объекта через отражение

 PropertyInfo[] methods = typeof(KeyItem).GetProperties();


 foreach (PropertyInfo method in methods)
 {
 //Use of Attribute.GetCustomAttributes which you can access the attributes
    Attribute[] attribs = Attribute.GetCustomAttributes(method, typeof(XmlAttribute));
 }
1
добавлено
Type type = typeof(VcRead);
foreach (var fiedInfo in type.GetFields())
{
   //your field

    foreach (var attribute in fiedInfo.GetCustomAttributes(true))
    {
       //attributes
    }                   
}

Чтобы получить имя элемента из XmlElementAttribute (тот же подход для XmlAttributeAttribute ):

if (attribute is XmlElementAttribute)
{
    var elementName = ((XmlElementAttribute)attribute).ElementName;
}

Также имейте в виду, что ваши классы имеют публичные поля вместо свойств.

1
добавлено
Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot