簡體   English   中英

C#Xml序列化節點

[英]C# Xml Serialization nodes

我有這些課

public class ProdutosServicos
{           
    public List<Produto> Produto { get; set; }  
}

public class Produto
{
    public string Descricao { get; set; }        
    public CodigoTipo Codigo { get; set; }
    public string Quantidade { get; set; }
    public string Unidade { get; set; }
    public string ValorUnitario { get; set; }
}

xml像這樣被序列化:

<ProdutosServicos>
   <Produto>
      <Produto>
        ...
      </Produto>
   </Produto>
</ProdutosServicos>

但我想這樣生成:

<ProdutosServicos>
   <Produto>
    ...
   </Produto>
</ProdutosServicos>

我找不到任何Xml屬性,可以在序列化過程中放置​​一個屬性來“刪除”第一個Produto節點。

關於如何做到這一點的任何想法?

謝謝。

只需在List屬性中使用屬性XmlElement。 像這樣。

public class ProdutosServicos
{
    // This is the attribute that makes your XML Array looks like a list of XML Elements.
    [XmlElement]
    public List<Produto> Produto { get; set; }
}

結果將是這樣的:

<?xml version="1.0" encoding="utf-16"?>
<ProdutosServicos xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Produto>
    ...
  </Produto>
  <Produto>
    ...
  </Produto>
  <Produto>
    ...
  </Produto>
</ProdutosServicos>

請參閱以下解決方案,

類定義

[Serializable]
[XmlRoot("ProdutosServicos")]
public class ProdutosServicos
{
    [XmlElement("Producto")]
    public List<Produto> Produto { get; set; }
}

[Serializable]
public class Produto
{
    public string Descricao { get; set; }
    public CodigoTipo Codigo { get; set; }
    public string Quantidade { get; set; }
    public string Unidade { get; set; }
    public string ValorUnitario { get; set; }
}
[Serializable]
public class CodigoTipo
{

}

要序列化的代碼

XmlSerializer serializer = new XmlSerializer(typeof(ProdutosServicos));
        var productoServices = new ProdutosServicos();
        Produto producto1 = new Produto();
        producto1.Descricao = "Descricao1";
        producto1.Quantidade = "Quantidade1";
        Produto producto2 = new Produto();
        producto2.Descricao = "Descricao2";
        producto2.Quantidade = "Quantidade2";

        List<Produto> collectionProducto = new List<Produto>();
        collectionProducto.Add(producto1);
        collectionProducto.Add(producto2);
        productoServices.Produto = collectionProducto;

        string xmlString = string.Empty;
        using (StringWriter stringWriter = new StringWriter())
        {
            using (XmlWriter writer = XmlWriter.Create(stringWriter))
            {
                serializer.Serialize(writer, productoServices);
                //String in required format
                xmlString = stringWriter.ToString(); 
            }
        }

XML輸出

<?xml version="1.0" encoding="utf-16"?>
<ProdutosServicos xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Producto>
    <Descricao>Descricao1</Descricao>
    <Quantidade>Quantidade1</Quantidade>
  </Producto>
  <Producto>
    <Descricao>Descricao2</Descricao>
    <Quantidade>Quantidade2</Quantidade>
  </Producto>
</ProdutosServicos>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM