2016-04-13 110 views
1

我有这些类C#XML序列化节点

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节点。

有关如何完成此任何想法?

谢谢。

+1

你的POCO类代表正是你在你的XML - 如果序列化POCO生成的XML确实是正确的。所以问题是 - 产品是一个集合吗?如果是,所有你可以有一个属性名称 - 一个复数形式'产品',那么你将有以下结构' ...'。也许这可能会帮助你http://stackoverflow.com/questions/14967293/remove-parent-node-without-childs-nodes – Jaya

+0

@JS_GodBlessAll,是啊,Produto是一个集合,我知道如果我复数化它的名字,它会变成,但要求只有 = /,就像我上面所说的那样。 – Maturano

回答

1

只需在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> 
+0

你撞在了头上,非常感谢你! – Maturano

1

请参考下面的解决方案,

类定义

[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> 
+0

它与[XmlElement]一起工作,谢谢! – Maturano

+0

@Maturano OK。很高兴知道。您也可以根据需要检查XML序列化的各种方式并处理结果XML。您可以从这里开始[XML序列化简介](https://msdn.microsoft.com/en-us/library/182eeyhh(v = vs.110).aspx) –