c# – 复杂的XML反序列化

我正在尝试反序列化复杂的 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();

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...