nodo leer especifico crear como atributos c# reflection attributes fieldinfo

especifico - leer atributos de un nodo xml c#



Obteniendo los atributos de un campo usando el reflejo en C# (1)

GetCustomAttributes método GetCustomAttributes devuelve un object[] , no HTMLAttributes[] . La razón por la que devuelve el object[] es que ha estado allí desde 1.0, antes de que los genéricos .NET vean la luz del día.

Debe convertir manualmente cada elemento en el valor de retorno a HTMLAttributes .

Para arreglar tu código, simplemente necesitas cambiar la línea a:

object[] htmlAttributes = field.GetCustomAttributes(typeof(HTMLAttributes), false);

foreach se hará cargo del reparto por ti.

Actualizar:

No debe convertir la matriz devuelta a HTMLAttributes[] . El valor de retorno no es HTMLAttributes[] . Es un object[] contiene elementos del tipo HTMLAttributes . Si desea un objeto HTMLAttribute[] tipeado (que no necesita en este fragmento de código específico, foreach sería suficiente), debe convertir cada elemento de la matriz individualmente en HTMLAttribute ; quizás usando LINQ:

HTMLAttributes[] htmlAttributes = returnValue.Cast<HTMLAttributes>().ToArray();

Escribí un método que extrae campos de un objeto como este:

private static string GetHTMLStatic(ref Object objectX, ref List<string> ExludeFields) { Type objectType = objectX.GetType(); FieldInfo[] fieldInfo = objectType.GetFields(); foreach (FieldInfo field in fieldInfo) { if(!ExludeFields.Contains(field.Name)) { DisplayOutput += GetHTMLAttributes(field); } } return DisplayOutput; }

Cada campo en mi clase también tiene sus propios atributos, en este caso mi atributo se llama HTMLAttributes. Dentro del ciclo foreach, estoy tratando de obtener los atributos para cada campo y sus respectivos valores. Actualmente se ve así:

private static string GetHTMLAttributes(FieldInfo field) { string AttributeOutput = string.Empty; HTMLAttributes[] htmlAttributes = field.GetCustomAttributes(typeof(HTMLAttributes), false); foreach (HTMLAttributes fa in htmlAttributes) { //Do stuff with the field''s attributes here. } return AttributeOutput; }

Mi clase de atributos se ve así:

[AttributeUsage(AttributeTargets.Field, AllowMultiple = true)] public class HTMLAttributes : System.Attribute { public string fieldType; public string inputType; public HTMLAttributes(string fType, string iType) { fieldType = fType.ToString(); inputType = iType.ToString(); } }

Esto parece lógico pero no se compilará, tengo una línea roja ondulada en el método GetHTMLAttributes () bajo:

field.GetCustomAttributes(typeof(HTMLAttributes), false);

El campo del cual estoy tratando de extraer los atributos está en otra clase usada así:

[HTMLAttributes("input", "text")] public string CustomerName;

Según mi entendimiento (o la falta de eso), ¿debería funcionar? ¡Por favor amplíen mi mente, compañeros desarrolladores!

* Editar, error del compilador :

No se puede convertir implícitamente el tipo ''object []'' a ''data.HTMLAttributes []''. Existe una conversión explícita (¿falta un elenco?)

He intentado lanzarlo así:

(HTMLAttributes)field.GetCustomAttributes(typeof(HTMLAttributes), false);

Pero eso tampoco funciona, obtengo este error de compilación:

No se puede convertir el tipo ''object []'' en ''data.HTMLAttributes''