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 属性放在 属性 到 "Remove" 序列化期间第一个 Produto 节点。
关于如何实现这个的任何想法?
谢谢。
只需在列表中使用属性 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>
请参阅下面的解决方案,
Class定义,
[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>
我有这些类
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 属性放在 属性 到 "Remove" 序列化期间第一个 Produto 节点。
关于如何实现这个的任何想法?
谢谢。
只需在列表中使用属性 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>
请参阅下面的解决方案,
Class定义,
[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>