Estoy usando VSTS2008 + C# + .Net 3.0. Estoy usando el código a continuación para serializar XML, y mi objeto contiene propiedad de tipo de matriz, pero existe una capa de elementos adicionales (en mi ejemplo, MyInnerObject y MyObject) que quiero eliminar del archivo XML generado. ¿Algunas ideas?Eliminación de elementos Wrapper de matriz serializada XML
actual archivo XML generado,
<?xml version="1.0"?>
<MyClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<MyObjectProperty>
<MyObject>
<MyInnerObjectProperty>
<MyInnerObject>
<ObjectName>Foo Type</ObjectName>
</MyInnerObject>
</MyInnerObjectProperty>
</MyObject>
</MyObjectProperty>
</MyClass>
archivo XML esperado,
<?xml version="1.0"?>
<MyClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<MyObjectProperty>
<MyInnerObjectProperty>
<ObjectName>Foo Type</ObjectName>
</MyInnerObjectProperty>
</MyObjectProperty>
</MyClass>
código actual,
public class MyClass
{
private MyObject[] _myObjectProperty;
[XmlArrayItemAttribute(IsNullable=false)]
public MyObject[] MyObjectProperty
{
get
{
return _myObjectProperty;
}
set
{
_myObjectProperty = value;
}
}
}
public class MyObject
{
private MyInnerObject[] _myInnerObjectProperty;
[XmlArrayItemAttribute(IsNullable = false)]
public MyInnerObject[] MyInnerObjectProperty
{
get
{
return _myInnerObjectProperty;
}
set
{
_myInnerObjectProperty = value;
}
}
}
public class MyInnerObject
{
public string ObjectName;
}
public class Program
{
static void Main(string[] args)
{
XmlSerializer s = new XmlSerializer(typeof(MyClass));
FileStream fs = new FileStream("foo.xml", FileMode.Create);
MyClass instance = new MyClass();
instance.MyObjectProperty = new MyObject[1];
instance.MyObjectProperty[0] = new MyObject();
instance.MyObjectProperty[0].MyInnerObjectProperty = new MyInnerObject[1];
instance.MyObjectProperty[0].MyInnerObjectProperty[0] = new MyInnerObject();
instance.MyObjectProperty[0].MyInnerObjectProperty[0].ObjectName = "Foo Type";
s.Serialize(fs, instance);
return;
}
}
Gracias Sander, su solución funciona. ¿Podría describir un poco más acerca de por qué el uso de XmlArrayItemAttribute afecta el resultado XML? ¿Y por qué funciona XmlElement? – George2
Solo hay una diferencia en ellos, que le permite usar ambas representaciones xml, XmlElement omite el nombre de propiedad y simplemente genera elementos, XmlArrayItem crea una matriz (nombrada con el nombre de propiedad) de los elementos (nombrados con el nombre que suministra) –
Gracias Sander , pregunta respondida Tengo otra pregunta aquí, aprecia si pudieras ayudarme, http://stackoverflow.com/questions/1227897/adding-an-addition-layer-to-xml-serialization-result-for-an-array – George2