所以,我一直试图反序化这个XML:
<DCR>
<Xcore_PD12M_ALL_PC_NC_Global>
<Xcore>411</Xcore>
<Categoria_de_Riesgo>Risk Alert</Categoria_de_Riesgo>
<Probabilidad_de_incumplimiento>91.75</Probabilidad_de_incumplimiento>
<HorizonteTiempo>
<Desde>02.2018</Desde>
<Hasta>01.2019</Hasta>
</HorizonteTiempo>
<Odds>
<Odds_A_Favor>1</Odds_A_Favor>
<Odds_EnContra>11.1</Odds_EnContra>
<ObligorAzar>12.1</ObligorAzar>
<ObligorIncumplimiento>11.1</ObligorIncumplimiento>
<PorcientoDeudorIncumplimiento>97.61</PorcientoDeudorIncumplimiento>
<PorcientoDeudorNoIncumplimiento>2.39</PorcientoDeudorNoIncumplimiento>
<QuantilPoblacion>29.89</QuantilPoblacion>
</Odds>
<Mes_evaluacion>01.2018</Mes_evaluacion>
</Xcore_PD12M_ALL_PC_NC_Global>
<DeudasPorProducto>
<Producto Nombre="Tarjeta de Crédito">
<EstatusImg>CR</EstatusImg>
<EstatusImg2 />
<CantidadCuentas>2</CantidadCuentas>
<CreditoAprobado Moneda="R.D. $">15000</CreditoAprobado>
<TotalAdeudado>23488</TotalAdeudado>
<Cuota>2194</Cuota>
<EnAtraso />
<EnLegal />
<Castigado>17504</Castigado>
</Producto>
<Producto Nombre="Tarjeta de Crédito">
<EstatusImg>CN</EstatusImg>
<EstatusImg2 />
<CantidadCuentas>1</CantidadCuentas>
<CreditoAprobado Moneda="U.S. $">219</CreditoAprobado>
<TotalAdeudado />
<Cuota />
<EnAtraso />
<EnLegal />
<Castigado />
</Producto>
<Producto Nombre="SERVICIOS">
<EstatusImg>CR</EstatusImg>
<EstatusImg2 />
<CantidadCuentas>1</CantidadCuentas>
<CreditoAprobado Moneda="R.D. $">2534</CreditoAprobado>
<TotalAdeudado>2534</TotalAdeudado>
<Cuota />
<EnAtraso />
<EnLegal />
<Castigado>2534</Castigado>
</Producto>
<Producto Nombre="Producto de Telecomunicaciones">
<EstatusImg>CG</EstatusImg>
<EstatusImg2 />
<CantidadCuentas>3</CantidadCuentas>
<CreditoAprobado Moneda="R.D. $">3021</CreditoAprobado>
<TotalAdeudado>1979</TotalAdeudado>
<Cuota />
<EnAtraso />
<EnLegal />
<Castigado />
</Producto>
<Producto Nombre="Préstamo">
<EstatusImg>CN</EstatusImg>
<EstatusImg2 />
<CantidadCuentas>2</CantidadCuentas>
<CreditoAprobado Moneda="R.D. $">40000</CreditoAprobado>
<TotalAdeudado />
<Cuota />
<EnAtraso />
<EnLegal />
<Castigado />
</Producto>
<Total ID="R.D. $ PESO">
<Total_CreditoAprobado>$60,555</Total_CreditoAprobado>
<Total_Adeudado>$28,001</Total_Adeudado>
<Total_Cuota>$2,194</Total_Cuota>
<Total_EnAtraso />
<Total_EnLegal />
<Total_Castigado>$20,038</Total_Castigado>
</Total>
<Total ID="U.S. $ DOLAR">
<Total_CreditoAprobado>$219</Total_CreditoAprobado>
<Total_Adeudado />
<Total_Cuota />
<Total_EnAtraso />
<Total_EnLegal />
<Total_Castigado />
</Total>
</DeudasPorProducto>
</DCR>
无法反序列化此部分:
<DeudasPorProducto>
<Producto Nombre="Tarjeta de Crédito">
<EstatusImg>CR</EstatusImg>
<EstatusImg2 />
<CantidadCuentas>2</CantidadCuentas>
<CreditoAprobado Moneda="R.D. $">15000</CreditoAprobado>
<TotalAdeudado>23488</TotalAdeudado>
<Cuota>2194</Cuota>
<EnAtraso />
<EnLegal />
<Castigado>17504</Castigado>
</Producto>
<Producto Nombre="Tarjeta de Crédito">
<EstatusImg>CN</EstatusImg>
<EstatusImg2 />
<CantidadCuentas>1</CantidadCuentas>
<CreditoAprobado Moneda="U.S. $">219</CreditoAprobado>
<TotalAdeudado />
<Cuota />
<EnAtraso />
<EnLegal />
<Castigado />
</Producto>
<Producto Nombre="SERVICIOS">
<EstatusImg>CR</EstatusImg>
<EstatusImg2 />
<CantidadCuentas>1</CantidadCuentas>
<CreditoAprobado Moneda="R.D. $">2534</CreditoAprobado>
<TotalAdeudado>2534</TotalAdeudado>
<Cuota />
<EnAtraso />
<EnLegal />
<Castigado>2534</Castigado>
</Producto>
<Producto Nombre="Producto de Telecomunicaciones">
<EstatusImg>CG</EstatusImg>
<EstatusImg2 />
<CantidadCuentas>3</CantidadCuentas>
<CreditoAprobado Moneda="R.D. $">3021</CreditoAprobado>
<TotalAdeudado>1979</TotalAdeudado>
<Cuota />
<EnAtraso />
<EnLegal />
<Castigado />
</Producto>
<Producto Nombre="Préstamo">
<EstatusImg>CN</EstatusImg>
<EstatusImg2 />
<CantidadCuentas>2</CantidadCuentas>
<CreditoAprobado Moneda="R.D. $">40000</CreditoAprobado>
<TotalAdeudado />
<Cuota />
<EnAtraso />
<EnLegal />
<Castigado />
</Producto>
<Total ID="R.D. $ PESO">
<Total_CreditoAprobado>$60,555</Total_CreditoAprobado>
<Total_Adeudado>$28,001</Total_Adeudado>
<Total_Cuota>$2,194</Total_Cuota>
<Total_EnAtraso />
<Total_EnLegal />
<Total_Castigado>$20,038</Total_Castigado>
</Total>
<Total ID="U.S. $ DOLAR">
<Total_CreditoAprobado>$219</Total_CreditoAprobado>
<Total_Adeudado />
<Total_Cuota />
<Total_EnAtraso />
<Total_EnLegal />
<Total_Castigado />
</Total>
</DeudasPorProducto>
正如您所看到的,Element&#34; Producto&#34;与另一个名为&#34; Total&#34;的元素混在一起,这可能就是它不能反序列化的原因。这些是我使用的课程:
public class DeudasPorProducto
{
[XmlElement("Producto")]
public List<Producto> Productos { get; set; }
}
public class Xcore
{
[XmlElement("Xcore")]
public int CrediScore { get; set; }
[XmlElement("Categoria_de_Riesgo")]
public string CategoriaRiesgo { get; set; }
[XmlElement("Probabilidad_de_incumplimiento")]
public double ProbabilidadIncumplimiento { get; set; }
[XmlElement("HorizonteTiempo")]
public Timeline HorizonteTiempo { get; set; }
[XmlElement("Odds")]
public Odds Odds { get; set; }
[XmlElement("Mes_evaluacion")]
public string MesEvaluacion { get; set; }
[XmlElement("DeudasPorProducto")]
public DeudasPorProducto Deudas { get; set; }
}
[XmlRoot("DCR")]
public class DataCreditoCreditReport
{
[XmlElement("Xcore_PD12M_ALL_PC_NC_Global")]
public Xcore Xcore { get; set; }
}
我尝试的最后一件事是使用Producto Class作为列表作为Xcore上的属性:
[XmlArray("DeudasPorProducto")]
[XmlArrayItem("Producto")]
public List<Producto> Productos { get; set; }
但它没有采取行动。此时我需要伸出援助之手。 :)
答案 0 :(得分:1)
如果您在问题中复制XML示例并使用Visual Studio将其粘贴为类(编辑菜单 - &gt;选择性粘贴 - >将XML粘贴为类),它将为您提供大约900行样板代码(其中大部分这是非常多余的),但是这会毫无问题地反序列化,并且应该给你一个不错的起点。
background-size
然后您应该可以使用XmlElement属性开始调整属性名称。
var xmlSerializer = new XmlSerializer(typeof(XmlClasses.DCR));
using (var fileStream = new FileStream(@"TestXml.xml", FileMode.Open, FileAccess.Read, FileShare.Read))
{
var dcr = (XmlClasses.DCR)xmlSerializer.Deserialize(fileStream);
}
答案 1 :(得分:1)
您可以使用Xml2CSharp网络服务生成具有必要属性的类。
该服务返回C#类,您可以使用编码样式重命名。
我已检查生成的类,但工作正常。
我的小提琴手在这里:.NET Fiddler
您需要为Producte类使用下一个声明:
[XmlRoot(ElementName="DeudasPorProducto")]
public class DeudasPorProducto {
[XmlElement(ElementName="Producto")]
public List<Producto> Producto { get; set; }
}