我正在尝试反序列化复杂的
XML文件.我有我的主类结构,所以它获得了第一个子节点中的所有信息,我甚至拥有它,以便我可以获得两层深的ClientName.但是,除此之外的任何事情似乎都不起作用.我得到一个计数为1的List项,但列表中没有信息.
我的OrderTaxes和OrderTransactions列表返回Count = 1,但所有字段都为空.
我很肯定这是我的班级结构的问题,任何帮助纠正这一点将非常感激.
这是XML:
<OrderDetail> <MessageTypeCode>82540</MessageTypeCode> <OrderDetailId>59339463</OrderDetailId> <ClientInfo> <ClientName>LenderName will appear here</ClientName> </ClientInfo> <OrderTaxes> <OrderTax> <TaxId>9202225</TaxId> </OrderTax> </OrderTaxes> <OrderTransactions> <OrderTransaction> <LoanAmount/> <Title> <Titlevendors> <Titlevendor> <vendorInstructions>blah blah blah blah .</vendorInstructions> <vendorServices> <TitlevendorService> <TitlevendorServiceId>6615159</TitlevendorServiceId> <ServiceCode>1OWNER</ServiceCode> <CustomvendorInstructions>blah blah blah blah blah </CustomvendorInstructions> </TitlevendorService> </vendorServices> </Titlevendor> </Titlevendors> </Title> </OrderTransaction> </OrderTransactions> </OrderDetail>
这是班级:
namespace TSIxmlParser { [XmlRoot("OrderDetail")] public class OrderData { [XmlElement("MessageTypeCode")] public string MessageTypeCode { get; set; } [XmlElement("OrderDetailId")] public string OrderNumber { get; set; } [XmlElement("ClientInfo")] public List<ClientInfo> ClientInfos = new List<ClientInfo>(); [XmlArray("OrderTaxes")] [XmlArrayItem("OrderTax")] public List<OrderTax> OrderTaxes = new List<OrderTax>(); [XmlArray("OrderTransactions")] [XmlArrayItem("OrderTransaction")] public List<OrderTransaction> OrderTransactions = new List<OrderTransaction>(); } public class ClientInfo { [XmlElement("ClientName")] public string ClientName { get; set; } } public class OrderTax { [XmlElement("TaxId")] public string TaxId { get; set; } } public class OrderTransaction { [XmlElement("LoanAmount")] public string LoanAmount { get; set; } [XmlArray("Title")] [XmlArrayItem("Titlevendors")] public List<Title> Titles { get; set; } } public class Title { [XmlArrayItem("Titlevendors")] public List<Titlevendors> Titlevendors { get; set; } } public class Titlevendors { [XmlArray("Titlevendor")] public List<Titlevendor> Titlevendor { get; set; } } public class Titlevendor { [XmlElement("vendorInstructions")] public string vendorInstructions { get; set; } [XmlArray("vendorServices")] [XmlArrayItem("TitlevendorService")] public List<TitlevendorService> vendorServices { get; set; } } public class TitlevendorService { [XmlElement("TitlevendorServiceId")] public string TitlevendorServiceId { get; set; } [XmlElement("ServiceCode")] public string ServiceCode { get; set; } [XmlElement("CustomvendorInstructions")] public string CustomvendorInstructions { get; set; } } }
解决方法
好吧,我不确定你是否想要这个(反序列化XML的原始转储):
{ MessageTypeCode: 82540,OrderDetailId: 59339463,ClientInfo: { ClientName: LenderName will appear here },OrderTaxes: { OrderTax: { TaxId: 9202225 } },OrderTransactions: { OrderTransaction: { LoanAmount: {},Title: { Titlevendors: { Titlevendor: { vendorInstructions: blah blah blah blah .,vendorServices: { TitlevendorService: { TitlevendorServiceId: 6615159,ServiceCode: 1OWNER,CustomvendorInstructions: blah blah blah blah blah } } } } } } } }
所以基本上我只使用了编辑 – >粘贴特殊 – >将XML粘贴为类:
/// <remarks/> [System.SerializableAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] [System.Xml.Serialization.XmlRootAttribute(Namespace = "",IsNullable = false)] public partial class OrderDetail { private uint messageTypeCodeField; private uint orderDetailIdField; private OrderDetailClientInfo clientInfoField; private OrderDetailOrderTaxes orderTaxesField; private OrderDetailOrderTransactions orderTransactionsField; /// <remarks/> public uint MessageTypeCode { get { return this.messageTypeCodeField; } set { this.messageTypeCodeField = value; } } /// <remarks/> public uint OrderDetailId { get { return this.orderDetailIdField; } set { this.orderDetailIdField = value; } } /// <remarks/> public OrderDetailClientInfo ClientInfo { get { return this.clientInfoField; } set { this.clientInfoField = value; } } /// <remarks/> public OrderDetailOrderTaxes OrderTaxes { get { return this.orderTaxesField; } set { this.orderTaxesField = value; } } /// <remarks/> public OrderDetailOrderTransactions OrderTransactions { get { return this.orderTransactionsField; } set { this.orderTransactionsField = value; } } } /// <remarks/> [System.SerializableAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] public partial class OrderDetailClientInfo { private string clientNameField; /// <remarks/> public string ClientName { get { return this.clientNameField; } set { this.clientNameField = value; } } } /// <remarks/> [System.SerializableAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] public partial class OrderDetailOrderTaxes { private OrderDetailOrderTaxesOrderTax orderTaxField; /// <remarks/> public OrderDetailOrderTaxesOrderTax OrderTax { get { return this.orderTaxField; } set { this.orderTaxField = value; } } } /// <remarks/> [System.SerializableAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] public partial class OrderDetailOrderTaxesOrderTax { private uint taxIdField; /// <remarks/> public uint TaxId { get { return this.taxIdField; } set { this.taxIdField = value; } } } /// <remarks/> [System.SerializableAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] public partial class OrderDetailOrderTransactions { private OrderDetailOrderTransactionsOrderTransaction orderTransactionField; /// <remarks/> public OrderDetailOrderTransactionsOrderTransaction OrderTransaction { get { return this.orderTransactionField; } set { this.orderTransactionField = value; } } } /// <remarks/> [System.SerializableAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] public partial class OrderDetailOrderTransactionsOrderTransaction { private object loanAmountField; private OrderDetailOrderTransactionsOrderTransactionTitle titleField; /// <remarks/> public object LoanAmount { get { return this.loanAmountField; } set { this.loanAmountField = value; } } /// <remarks/> public OrderDetailOrderTransactionsOrderTransactionTitle Title { get { return this.titleField; } set { this.titleField = value; } } } /// <remarks/> [System.SerializableAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] public partial class OrderDetailOrderTransactionsOrderTransactionTitle { private OrderDetailOrderTransactionsOrderTransactionTitleTitlevendors titlevendorsField; /// <remarks/> public OrderDetailOrderTransactionsOrderTransactionTitleTitlevendors Titlevendors { get { return this.titlevendorsField; } set { this.titlevendorsField = value; } } } /// <remarks/> [System.SerializableAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] public partial class OrderDetailOrderTransactionsOrderTransactionTitleTitlevendors { private OrderDetailOrderTransactionsOrderTransactionTitleTitlevendorsTitlevendor titlevendorField; /// <remarks/> public OrderDetailOrderTransactionsOrderTransactionTitleTitlevendorsTitlevendor Titlevendor { get { return this.titlevendorField; } set { this.titlevendorField = value; } } } /// <remarks/> [System.SerializableAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] public partial class OrderDetailOrderTransactionsOrderTransactionTitleTitlevendorsTitlevendor { private string vendorInstructionsField; private OrderDetailOrderTransactionsOrderTransactionTitleTitlevendorsTitlevendorvendorServices vendorServicesField; /// <remarks/> public string vendorInstructions { get { return this.vendorInstructionsField; } set { this.vendorInstructionsField = value; } } /// <remarks/> public OrderDetailOrderTransactionsOrderTransactionTitleTitlevendorsTitlevendorvendorServices vendorServices { get { return this.vendorServicesField; } set { this.vendorServicesField = value; } } } /// <remarks/> [System.SerializableAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] public partial class OrderDetailOrderTransactionsOrderTransactionTitleTitlevendorsTitlevendorvendorServices { private OrderDetailOrderTransactionsOrderTransactionTitleTitlevendorsTitlevendorvendorServicesTitlevendorService titlevendorServiceField; /// <remarks/> public OrderDetailOrderTransactionsOrderTransactionTitleTitlevendorsTitlevendorvendorServicesTitlevendorService TitlevendorService { get { return this.titlevendorServiceField; } set { this.titlevendorServiceField = value; } } } /// <remarks/> [System.SerializableAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] public partial class OrderDetailOrderTransactionsOrderTransactionTitleTitlevendorsTitlevendorvendorServicesTitlevendorService { private uint titlevendorServiceIdField; private string serviceCodeField; private string customvendorInstructionsField; /// <remarks/> public uint TitlevendorServiceId { get { return this.titlevendorServiceIdField; } set { this.titlevendorServiceIdField = value; } } /// <remarks/> public string ServiceCode { get { return this.serviceCodeField; } set { this.serviceCodeField = value; } } /// <remarks/> public string CustomvendorInstructions { get { return this.customvendorInstructionsField; } set { this.customvendorInstructionsField = value; } } }
使用的所有代码:
var xmlString = @ "<OrderDetail> <MessageTypeCode>82540</MessageTypeCode> <OrderDetailId>59339463</OrderDetailId> <ClientInfo> <ClientName>LenderName will appear here</ClientName> </ClientInfo> <OrderTaxes> <OrderTax> <TaxId>9202225</TaxId> </OrderTax> </OrderTaxes> <OrderTransactions> <OrderTransaction> <LoanAmount/> <Title> <Titlevendors> <Titlevendor> <vendorInstructions>blah blah blah blah .</vendorInstructions> <vendorServices> <TitlevendorService> <TitlevendorServiceId>6615159</TitlevendorServiceId> <ServiceCode>1OWNER</ServiceCode> <CustomvendorInstructions>blah blah blah blah blah </CustomvendorInstructions> </TitlevendorService> </vendorServices> </Titlevendor> </Titlevendors> </Title> </OrderTransaction> </OrderTransactions> </OrderDetail>"; var xml = new OrderDetail(); System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(OrderDetail)); using(XmlReader reader = XmlReader.Create(new StringReader(xmlString))) { xml = (OrderDetail) serializer.Deserialize(reader); } var xmlDump = xml.Dump();