SORU
5 Ocak 2010, Salı


C# Xml serileştirme - dizi devre dışı kök öğesi oluşturma

koleksiyonunun kök öğesi devre dışı bırakmak render bir şekilde alabilir miyim?

seri hale getirme özellikleri ile bu sınıfın

 [XmlRoot(ElementName="SHOPITEM", Namespace="")]
    public class ShopItem
    {
        [XmlElement("PRODUCTNAME")]
        public string ProductName { get; set; }       

        [XmlArrayItem("VARIANT")]
        public List<ShopItem> Variants { get; set; }

    }

oluşturur bu xml:

<SHOPITEM xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <PRODUCTNAME>test</PRODUCTNAME>
      <Variants>
        <VARIANT>
          <PRODUCTNAME>hi 1</PRODUCTNAME>
        </VARIANT>
        <VARIANT>
          <PRODUCTNAME>hi 2</PRODUCTNAME>
        </VARIANT>           
      </Variants>        
    </SHOPITEM>

<Variants> buradaki istemiyorum. Ne yapmalıyım?

Ayrıca kök öğesi.. xsi ve yanıtlanan ad ihtiyacım yok

Teşekkürler yardım için bir sürü.

CEVAP
5 Ocak 2010, Salı


Bunu deneyin:

[XmlRoot(ElementName = "SHOPITEM", Namespace = "")]
public class ShopItem
{
    [XmlElement("PRODUCTNAME")]
    public string ProductName { get; set; }

    [XmlElement("VARIANT")] // was [XmlArrayItem]
    public List<ShopItem> Variants { get; set; }
}

// ...

XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");

ShopItem item = new ShopItem()
{
    ProductName = "test",
    Variants = new List<ShopItem>()
    {
        new ShopItem(){ ProductName = "hi 1" },
        new ShopItem(){ ProductName = "hi 2" }
    }
};

XmlSerializer ser = new XmlSerializer(typeof(ShopItem));
ser.Serialize(Console.Out, item, ns);

Bu çıktıyı aldım:

<?xml version="1.0" encoding="ibm850"?>
<SHOPITEM>
  <PRODUCTNAME>test</PRODUCTNAME>
  <VARIANT>
    <PRODUCTNAME>hi 1</PRODUCTNAME>
  </VARIANT>
  <VARIANT>
    <PRODUCTNAME>hi 2</PRODUCTNAME>
  </VARIANT>
</SHOPITEM>

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • cekehechu

    cekehechu

    20 HAZİRAN 2006
  • Djbasilio AuToBaSs

    Djbasilio Au

    20 Aralık 2008
  • Miles Fisher

    Miles Fisher

    8 NİSAN 2009