2016-04-13 6 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

Ваш класс ПОКО представляет именно то, что у вас есть в вашем XML - если вы сериализации ПОКО полученный XML действительно прав. Итак, вопрос в том, является ли «Produto a collection»? если да, то все, что у вас есть, - это имя атрибута - множественная форма 'Produtos', тогда у вас будет следующая структура: ...'. Вероятно, это может помочь вам http://stackoverflow.com/questions/14967293/remove-parent-node-without-childs-nodes – Jaya

+0

@JS_GodBlessAll, да, Produto - это коллекция, я знаю, если бы я плюрализую имя, это станет , но требование состоит в том, чтобы иметь только = /, точно так же, как я поставил выше. – Maturano

ответ

1

Просто используйте атрибут XmlElement в свойстве List. Как это.

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 Output

<?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) –

Смежные вопросы