VSTS2008 + C# + .NET 3.0 kullanıyorum. XML'i serileştirmek için aşağıdaki kodu kullanıyorum ve nesneyim dizi tipi özelliği içeriyor, ancak oluşturulan XML dosyasından kaldırmak istediğim bazı ek öğeler katmanı (örneğimde, MyInnerObject ve MyObject) oluşturuldu. Herhangi bir fikir?XML-Seri hale getirilmiş Diziden Sarmalayıcı Öğelerini Kaldırma
Güncel oluşturulan XML dosyası,
<?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>
Beklenen XML dosyası,
<?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>
Güncel kodu,
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;
}
}
Thanks Sander'ın çevresinde bir .xsd varsa, daha iyi çalışır. Çözümünüz çalışır. XmlArrayItemAttribute'un neden XML'yi etkilediğini biraz daha açıklayabilir misiniz? Ve neden XmlElement çalışır? – George2
Sadece xml gösterimlerini kullanmanıza izin veren, XmlElement öğesinin adını atladığını ve yalnızca çıktı öğelerini kullanabildiğiniz bir fark vardır. XmlArrayItem öğelerin (propertyname ile adlandırılmış) bir dizi oluşturur (sağladığınız adla adlandırılır) –
Teşekkürler Sander , soru cevaplandı. Burada başka bir sorum var, yardımcı olabilirseniz teşekkür ederiz, http://stackoverflow.com/questions/1227897/adding-an-adeli-layer-to-xml-serialization-result-for-an-array – George2