Errores de serialización de clase Xml

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

preguntado el 11 de junio de 12 a las 19:06

Para el XML que desea, desea XmlElement, no XmlAttribute. El hecho de que no tenga ningún elemento definido podría ser su problema. -

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. -

ya lo estoy escribiendo Me di cuenta de eso después de publicarlo. Aunque gracias -

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á. -

1 Respuestas

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 or haz tu propia pregunta.