c# – 复杂的XML反序列化
发布时间:2020-12-16 02:02:33 所属栏目:百科 来源:网络整理
导读:我正在尝试反序列化复杂的 XML文件.我有我的主类结构,所以它获得了第一个子节点中的所有信息,我甚至拥有它,以便我可以获得两层深的ClientName.但是,除此之外的任何事情似乎都不起作用.我得到一个计数为1的List项,但列表中没有信息. 我的OrderTaxes和OrderTra
我正在尝试反序列化复杂的
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(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |