我有以下几行代码和问题。
[Serializable, XmlRoot(Namespace = "http://www.asd.com", ElementName = "DalClassObject", IsNullable = true)]
[XmlType(AnonymousType = true)]
public class DalClassObject<T>
{
public DalClassObject()
{ }
[XmlElement(ElementName = "objeto", IsNullable = true)]
public T Objeto { get; set; }
[XmlElement(ElementName = "indicador")]
public Int32 Indicador { get; set; }
[XmlElement(ElementName = "validador")]
public Boolean Validador { get; set; }
[XmlElement(ElementName = "mensaje")]
public String Mensaje { get; set; }
//[XmlElement(ElementName = "coleccion")]
[XmlArray("colecciones")]
[XmlArrayItem]
public List<T> Colecciones { get; set; }
}
和
[Serializable, XmlRoot("botblpacientes")]
public class BoTblPacientes
{
[XmlElement(ElementName = "tblPacientesID")]
public String tblPacientesID { get; set; }
[XmlElement(ElementName = "tblPacientesApellidos")]
public String tblPacientesApellidos { get; set; }
[XmlElement(ElementName = "tblPacientesNombres")]
public String tblPacientesNombres { get; set; }
[XmlElement(ElementName = "tblPacientesDocumento")]
public String tblPacientesDocumento { get; set; }
[XmlElement(ElementName = "tblPacientesCorreo")]
public String tblPacientesCorreo { get; set; }
[XmlElement(ElementName = "tblPacientesFoto")]
public byte[] tblPacientesFoto { get; set; }
[XmlElement(ElementName = "tblPacientesDireccion")]
public String tblPacientesDireccion { get; set; }
[XmlElement(ElementName = "tblPacientesEstadoCivil")]
public Int32 tblPacientesEstadoCivil { get; set; }
[XmlElement(ElementName = "tblPacientesFechaNacimiento")]
public DateTime tblPacientesFechaNacimiento { get; set; }
[XmlElement(ElementName = "tblPacientesSexo")]
public Int32 tblPacientesSexo { get; set; }
[XmlElement(ElementName = "tblPacientesTlfCasa")]
public String tblPacientesTlfCasa { get; set; }
[XmlElement(ElementName = "tblPacientesTlfCelular")]
public String tblPacientesTlfCelular { get; set; }
[XmlElement(ElementName = "tblPacientesTlfOficina")]
public String tblPacientesTlfOficina { get; set; }
[XmlElement(ElementName = "tblPacientesLugarNacimiento")]
public String tblPacientesLugarNacimiento { get; set; }
[XmlElement(ElementName = "tblPacientesMotivoConsulta")]
public String tblPacientesMotivoConsulta { get; set; }
[XmlElement(ElementName = "tblPacientesFechaRegistro")]
public DateTime tblPacientesFechaRegistro { get; set; }
[XmlElement(ElementName = "tblPacientesIDMaster")]
public Int32 tblPacientesIDMaster { get; set; }
}
public static T DeserializeObject<T>(string xml)
{
XmlSerializer xs = new XmlSerializer(typeof(T));
MemoryStream memoryStream = new MemoryStream(StringToUTF8ByteArray(xml));
XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
return (T)xs.Deserialize(memoryStream);
}
private static Byte[] StringToUTF8ByteArray(string pXmlString)
{
UTF8Encoding encoding = new UTF8Encoding();
byte[] byteArray = encoding.GetBytes(pXmlString);
return byteArray;
}
我使用以下内容反序列化,在简历中
DalClassObject<BoTblPacientes> objeto = new DalClassObject<BoTblPacientes>();
objeto.Objeto = new BoTblPacientes();
objeto.Colecciones = new List<BoTblPacientes>();
String valor = String.Empty;
objeto = UtilClassSerializacion.DeserializeObject<DalClassObject<BoTblPacientes>>(reader[0].ToString());
当我检查objeto.Collecciones的值时,我看到的是值,但所有值都是空的。如果返回2个值,则全部变为空。 我的序列化有什么问题?我尝试使用xmlelement,xmlarray,xmlarrayitem。
我的xml对象是
<?xml version="1.0" ?>
<DalClassObject xmlns="http://www.asd.com"><objeto class="BoTblPacientes"></objeto>
<validador>true</validador><mensaje>El paciente existe en el sistema .</mensaje>
<colecciones>
<BoTblPacientes>
<tblpacientesmotivoconsulta>5</tblpacientesmotivoconsulta><tblpacientestlfcasa>5</tblpacientestlfcasa>
<tblpacientescelular>5</tblpacientescelular><tblpacientesoficina>5</tblpacientesoficina>
<tblpacientescorreo>5</tblpacientescorreo><tblpacientesdireccion>5</tblpacientesdireccion>
<tblpacientesapellidos>5</tblpacientesapellidos><tblpacientesdocumento>5</tblpacientesdocumento>
<tblpacientessexoid>0</tblpacientessexoid><tblpacientesfechanacimiento class="sql-date">2012-05-13</tblpacientesfechanacimiento>
<tblpacientesnombres>5</tblpacientesnombres><tblpacientesid>2</tblpacientesid><tblpacientesestadocivil>0</tblpacientesestadocivil>
<tblpacientesfecharegistro class="sql-date">2012-05-13</tblpacientesfecharegistro><tblpacienteidmaster>0</tblpacienteidmaster>
</BoTblPacientes>
<BoTblPacientes>
<tblpacientesmotivoconsulta>23232</tblpacientesmotivoconsulta><tblpacientestlfcasa>2332</tblpacientestlfcasa>
<tblpacientescelular>23</tblpacientescelular><tblpacientesoficina>23</tblpacientesoficina><tblpacientescorreo>23</tblpacientescorreo>
<tblpacientesdireccion>2323</tblpacientesdireccion><tblpacientesapellidos>ewr</tblpacientesapellidos>
<tblpacientesdocumento>5</tblpacientesdocumento><tblpacientessexoid>0</tblpacientessexoid>
<tblpacientesfechanacimiento class="sql-date">2012-03-29</tblpacientesfechanacimiento><tblpacientesnombres>wer</tblpacientesnombres>
<tblpacientesid>3</tblpacientesid><tblpacientesestadocivil>0</tblpacientesestadocivil>
<tblpacientesfecharegistro class="sql-date">2012-05-13</tblpacientesfecharegistro>
<tblpacienteidmaster>0</tblpacienteidmaster>
</BoTblPacientes></colecciones>
</DalClassObject>
我测试但我的课程是通用的,我怎么说
[XmlArray("colecciones")]
[XmlArrayItem(Type=typeof(T))] // is this was possible my problem become solved but dont support Parameter as variable.
public List<T> Colecciones { get; set; }
任何帮助?
答案 0 :(得分:0)
我解决了以下问题。
[Serializable, XmlRoot(Namespace = "http://www.asd.com", ElementName = "botblpacientes", IsNullable = true)]
public class BoTblPacientes
{
[XmlElement(ElementName = "tblpacientesid")]
public Int32 tblpacientesid { get; set; }
...
all the properties in lower case, due a xml has all in lower case.
}
并在DalClassObject中,在xmlarrayitem中设置名称空间
[XmlArray(ElementName = "colecciones", IsNullable = true)]
[XmlArrayItem(Namespace = "http://www.asd.com", IsNullable = true)]
public List<T> Colecciones { get; set; }
工作完成了。