2012-06-11 77 views
2

我想创建这样的XML:XML类序列化错误

<CreditApplication> 
    <ApplicantData> 
     <FirstName> John </FirstName> 
     <LastName> Smith </LastName> 
    </ApplicantData> 
    <CoApplicantData> 
     <FirstName> Mary </FirstName> 
     <LastName> Jane </LastName> 
    </CoApplicantData> 
</CreditApplication> 

而且我定义我的阶级作为阶级:

[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; } 
    ... 
} 

而在CreditApplication类我引用进一步下跌在我的程序中的其他地方定义的枚举也需要进行可用化。

当我实际运行该程序,并尝试serlizize与类:

XmlSerializer applicantXMLSerializer = new XmlSerializer(typeof(CreditApplication)); 
StringWriter applicantStringWriter = new StringWriter(); 
XmlWriter applicantXmlWriter = XmlWriter.Create(applicantStringWriter); 
applicantXMLSerializer.Serialize(applicantXmlWriter, application); 
var applicantXML = applicantStringWriter.ToString(); 

但我得到的错误:There was an error reflecting type 'Models.Credit.CreditApplication'

没有人有任何知道我做错了吗?

编辑:

我已经更新上面的代码以反映更改建议。还有其他问题已经提出。

我有定义为这样一个枚举:

[DataContract] 
public enum Relationship 
{ 
    Spouse = 4, 
    ResidesWith = 1, 
    Parent = 2, 
    Other = 3, 
    PersonalGuarantor = 5, 
    CoApplicant = 6 
} 

如上所示,零是不是一个定义的选项。因此,没有默认值。我已经围绕这样的想法设计了程序,即未设置的关系默认为零。这样我可以很容易地看到是否已经设置了一个值。如果我定义了零,然后将它初始化为“无关系”或类似的东西,那么就无法判断用户是将值设置为“无关系”,还是只是没有选择一个选项。

感动:

XML Serialization of Enums Without Default Values

+2

对于您想要的XML,您需要XmlElement,而不是XmlAttribute。您没有任何定义元素的事实可能是您的问题。 – Joe

+0

您应该将您的更新问题作为一个新问题提出。无论如何,我会在下面添加我的答案来尝试解决这个问题。 –

+0

我已经在写它。我发布后,我意识到。不过谢谢。 –

回答

2

您要使用的XMLElement Attribute代替XMLAttribute Attribute如果你的领域应该是在单独的XML元素。

例如:

<SimpleXML name="test"> 
    <child>SomeValue</child> 
</SimpleXML> 

name是一个属性,而child是一个元素。

+0

即使有这些更改,我仍然得到一个InvalidOperationException与“生成XML文档时出错。”例外。 –