我有一个代表发票的复杂XML。
我需要使用.NET Core和XmlSerializer
生成如下的XML结构:
<DetalleServicio>
<LineaDetalle>
ALL MY VALUES HERE
</LineaDetalle>
<LineaDetalle>
MY VALUES HERE
</LineaDetalle>
</DetalleServicio>
如您所见,DetalleServicio
可以包含许多LineaDetalle
个孩子。
我正在尝试使用某些类来完成这项工作,所以我有:
public class DetalleServicio
{
public List<LineaDetalle> LineaDetalle { get; set; }
}
和
public class LineaDetalle
{
public int NumeroLinea { get; set; }
public CodigoProducto[] Codigo { get; set; }
public decimal Cantidad { get; set; }
public string UnidadMedida { get; set; }
public string UnidadMedidaComercial { get; set; }
public string Detalle { get; set; }
public decimal PrecioUnitario { get; set; }
public decimal MontoTotal { get; set; }
public decimal MontoDescuento { get; set; }
public string NaturalezaDescuento { get; set; }
public decimal SubTotal { get; set; }
public Impuesto Impuesto { get; set; }
public decimal MontoTotalLinea { get; set; }
}
Finally I'm doing something like this
DetalleServicio = new DetalleServicio()
{
LineaDetalle = new List<LineaDetalle>()
{
new LineaDetalle()
{
},
new LineaDetalle()
{
}
}
}
最后,我们使用XmlSerializer
生成了XML,但是问题是XmlSerializer
将LineaDetalle
写为父级,而LineaDetalle
写为子级,例如:
<DetalleServicio>
<LineaDetalle>
<LineaDetalle>
ALL MY VALUES HERE
</LineaDetalle>
<LineaDetalle>
MY VALUES HERE
</LineaDetalle>
</LineaDetalle>
</DetalleServicio>
如何解决此问题?我尝试使用XmlDocument
删除父<LineaDetalle>
节点,但是会引发“ cs0 ...”错误。
谢谢。
答案 0 :(得分:0)
我找到了答案:
因为我正在使用
public List<LineaDetalle> LineaDetalle { get; set; }
和
LineaDetalle = new List<LineaDetalle>()
{
new LineaDetalle()
{}
new LineaDetalle()
{}
}
使用xmlserialize时,它导致具有两个层次结构来表示List<LineaDetalle>
集合。您有一个<LineaDetalle>
标签,然后对于该集合中的每个明细都有一个<LineaDetalle>
标签
因此,要使用XmlSerializer消除标记,只需使用XmlElementAttribute更新LineaDetalle成员,该XmlElementAttribute指定要用于每个项目的名称
例如
[XmlElement("LineaDetalle")]
public List<LineaDetalle> LineaDetalle { get; set; }
现在实例正在被序列化器使用而没有额外的标签