tengo las siguientes clasesCómo agregar atributos XmlInclude dinámicamente
[XmlRoot]
public class AList
{
public List<B> ListOfBs {get; set;}
}
public class B
{
public string BaseProperty {get; set;}
}
public class C : B
{
public string SomeProperty {get; set;}
}
public class Main
{
public static void Main(string[] args)
{
var aList = new AList();
aList.ListOfBs = new List<B>();
var c = new C { BaseProperty = "Base", SomeProperty = "Some" };
aList.ListOfBs.Add(c);
var type = typeof (AList);
var serializer = new XmlSerializer(type);
TextWriter w = new StringWriter();
serializer.Serialize(w, aList);
}
}
Ahora, cuando trato de ejecutar el código que tengo una InvalidOperationException en la última línea diciendo que
El tipo XmlTest.C no se esperaba . Utilice el atributo XmlInclude o SoapInclude para especificar los tipos que no se conocen estáticamente.
Sé que al agregar un atributo [XmlInclude (typeof (C))] con [XmlRoot] se resolvería el problema. Pero quiero lograrlo dinámicamente. Porque en mi clase de proyecto C no se conoce antes de la carga. La clase C se está cargando como un complemento, por lo que no me es posible agregar el atributo XmlInclude allí.
me trataron también con
TypeDescriptor.AddAttributes(typeof(AList), new[] { new XmlIncludeAttribute(c.GetType()) });
antes
var type = typeof (AList);
pero sin uso. Todavía está dando la misma excepción.
¿Alguien tiene alguna idea sobre cómo lograrlo?
He intentado esto pero me está dando esta siguiente excepción "Los atributos XmlRoot y XmlType no se pueden especificar para el tipo XmlTest.AList." ¿Alguna idea de por qué viene y cómo resolverla? –
@Anindya - eso es extraño; el ejemplo "tal como es" funciona bien para mí. ¿Qué versión de framework estás usando? –
@Anindya - He intentado con 4.0 y 2.0 (que cubre 3.0 y 3.5) y no puedo reproducir. ¿Puedes dar una descripción más completa de esto? –