Ich verwende VSTS2008 + C# + .Net 3.0. Ich verwende unten Code, um XML zu serialisieren, und mein Objekt enthält Array-Typ-Eigenschaft, aber dort einige zusätzliche Elemente Ebene (in meinem Beispiel, MyInnerObject und MyObject) generiert, die ich aus der generierten XML-Datei entfernen möchte. Irgendwelche Ideen?Wrapper-Elemente aus dem XML-serialisierten Array entfernen
Aktuelle generierte XML-Datei,
<?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>
Expected XML-Datei,
<?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>
Aktuelle Code,
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;
}
}
Dank Sander, funktioniert Ihre Lösung. Können Sie etwas mehr darüber beschreiben, warum die Verwendung von XmlArrayItemAttribute Auswirkungen auf das Ergebnis-XML hat? Und warum XmlElement funktioniert? – George2
Es gibt nur einen Unterschied darin, dass Sie beide XML-Darstellungen verwenden können, XmlElement überspringt den Eigenschaftsnamen und gibt nur Elemente aus, XmlArrayItem erstellt ein Array (benannt mit dem Eigenschaftsnamen) von Elementen (benannt mit dem von Ihnen angegebenen Namen) –
Danke Sander , Frage beantwortet. Ich habe eine weitere Frage hier, zu schätzen, wenn Sie helfen könnten, http://StackOverflow.com/Questions/1227897/Adding-an-Additional-Layer-To-XML-Serialization-result-for-an-array – George2