加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读