Errores de serialización de clase Xml
Frecuentes
Visto 479 veces
2
Estoy tratando de crear xml como este:
<CreditApplication>
<ApplicantData>
<FirstName> John </FirstName>
<LastName> Smith </LastName>
</ApplicantData>
<CoApplicantData>
<FirstName> Mary </FirstName>
<LastName> Jane </LastName>
</CoApplicantData>
</CreditApplication>
Y he definido mis clases como tal:
[XmlRoot("CreditApplication")]
public class CreditApplication
{
[XmlElement("ApplicantData")]
public CreditApplicant Applicant;
[XmlElement("CoApplicantData")]
public CreditApplicant CoApplicant;
}
public class CreditApplicant : INotifyPropertyChanged
{
...
[XmlElement("FirstName")]
public string FirstName { set; get; }
[XmlElement("LastName")]
public string LastName { set; get; }
...
}
Y más abajo en la clase CreditApplication tengo referencias a enumeraciones que están definidas en otra parte de mi programa que también necesitan ser serializables.
Cuando ejecuto el programa y trato de serlizar la clase con:
XmlSerializer applicantXMLSerializer = new XmlSerializer(typeof(CreditApplication));
StringWriter applicantStringWriter = new StringWriter();
XmlWriter applicantXmlWriter = XmlWriter.Create(applicantStringWriter);
applicantXMLSerializer.Serialize(applicantXmlWriter, application);
var applicantXML = applicantStringWriter.ToString();
Pero me sale el error: There was an error reflecting type 'Models.Credit.CreditApplication'
¿Alguien tiene alguna idea de lo que estoy haciendo mal?
EDIT:
He actualizado el código anterior para reflejar los cambios sugeridos. Sin embargo, hay otros problemas que se han presentado.
Tengo una enumeración definida como tal:
[DataContract]
public enum Relationship
{
Spouse = 4,
ResidesWith = 1,
Parent = 2,
Other = 3,
PersonalGuarantor = 5,
CoApplicant = 6
}
Como se vio anteriormente, cero no es una opción definida. Debido a esto, no hay un valor predeterminado. He diseñado el programa en torno a la idea de que una relación que no está configurada por defecto es cero. De esa manera, puedo ver fácilmente si se ha establecido un valor. Si tengo cero definido y luego lo inicializo en "Sin relación" o algo así, entonces no hay forma de saber si el usuario estableció el valor en "Sin relación", o si simplemente no eligió una opción.
Movido:
Serialización XML de enumeraciones sin valores predeterminados
1 Respuestas
2
Quieres usar el Atributo XMLElement en vez de Atributo XMLAttribute si se supone que sus campos son elementos separados en el XML.
Por ejemplo:
<SimpleXML name="test">
<child>SomeValue</child>
</SimpleXML>
name
es un atributo, mientras que child
es un elemento.
Respondido el 11 de junio de 12 a las 19:06
Incluso con esos cambios, sigo recibiendo una InvalidOperationException con "Hubo un error al generar el documento XML". Excepción. - Nathan Tornquist
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas c# xml xml-serialization or haz tu propia pregunta.
Para el XML que desea, desea XmlElement, no XmlAttribute. El hecho de que no tenga ningún elemento definido podría ser su problema. - Joe
Probablemente debería plantear su pregunta actualizada como una nueva pregunta. De todos modos, agregaré mi respuesta a continuación para tratar de abordar esto. - Jon Senchyna
ya lo estoy escribiendo Me di cuenta de eso después de publicarlo. Aunque gracias - Nathan Tornquist
Genial. También parece que obtuvo su respuesta allí y actualizó esta pregunta de manera adecuada, por lo que dejaré mi respuesta tal como está. - Jon Senchyna