簡體   English   中英

XMLSerializer:查找具有名稱和屬性值的元素

[英]XMLSerializer : Find element with name and attribute value

我正在努力將來自第三方的 XML 反序列化為一組 C# 類。 這些類將用於填充另一個域模型。 (ETL代碼)

下面是 XML 的部分示例:

<Root>
    <Message>
        <Transaction>
            <Header group_element="2TRG00">2TRG212 7</Header>
            <TransactionStructureStandardVersionNumber group_element="2TRG01">98</TransactionStructureStandardVersionNumber>
            <ApplicationSoftwareRevisionLevel group_element="2TRG02"/>
            <TransactionImage group_element="2TRG03"/>
            <AutomationLevel group_element="2TRG04">3</AutomationLevel>
            <TransactionCategory group_element="2TRG05">P</TransactionCategory>
            <PolicyTypeRoutingCode group_element="2TRG06">P</PolicyTypeRoutingCode>
            <LineOfBusinessRoutingCode group_element="2TRG07">HOME</LineOfBusinessRoutingCode>
            <TransactionFunction group_element="2TRG08">FMG</TransactionFunction>
            <ProcessingCycleStatus group_element="2TRG09">B</ProcessingCycleStatus>
            <InitialTransactionMode group_element="2TRG10">N</InitialTransactionMode>
            <SpecialResponseOption group_element="2TRG11">0</SpecialResponseOption>
            <ErrorProcessingOption group_element="2TRG12"/>
            <FormalTransactionAddress group_element="2TRG13">IBM954UNIV</FormalTransactionAddress>
            <InformalTransactionAddress group_element="2TRG14">UNIVERSAL P&amp;C INS CO</InformalTransactionAddress>
            <FormalTransactionAddress group_element="2TRG15"/>
            <InformalTransactionAddress group_element="2TRG16"/>
            <SpecialHandling group_element="2TRG17">WEBCETERA</SpecialHandling>
            <OriginationReferenceInformation group_element="2TRG18"/>
            <TransactionSequenceNumber group_element="2TRG19">8249</TransactionSequenceNumber>
            <DeletedTransactionDate group_element="2TRG20">210217</DeletedTransactionDate>
            <ProcessingCycleNumber group_element="2TRG21">8249</ProcessingCycleNumber>
            <ReferenceTransactionSequenceNumber group_element="2TRG22"/>
            <DeletedTransactionEffectiveDate group_element="2TRG23">210228</DeletedTransactionEffectiveDate>
            <ResponseAutomationLevel group_element="2TRG24"/>
            <CycleBusinessPurpose group_element="2TRG25">REI</CycleBusinessPurpose>
            <SynchronizationField group_element="2TRG26"/>
            <SegmentLevelCode group_element="2TRG27"/>
            <SegmentedTransactionCounter group_element="2TRG28"/>
            <SegmentedTransactionTotalPieces group_element="2TRG29"/>
            <QuoteDate group_element="2TRG30"/>
            <DeletedYear2000LogicCode group_element="2TRG31">A</DeletedYear2000LogicCode>
            <TransactionDate group_element="2TRG32">20210217</TransactionDate>
            <TransactionEffectiveDate group_element="2TRG33">20210228</TransactionEffectiveDate>
        </Transaction>
    </Message>
</Root>

兩件事情:

  1. 一些元素名稱重復,例如 InformalTransactionAddress
  2. 每個元素都有一個名為“group_element”的屬性,具有唯一的值

這是我目前的課程(正在進行中)

using Insurance_Carrer_Capture.API.Policy;
using System;
using System.Xml.Serialization;
using AcordAL3XMLParsingLibrary.Extensions;

namespace Insurance_Carrier_Capture.API.Core.Models.Policy
{
    public class Transaction : IPolicyVisitable
    {
        [XmlIgnore]
        public Message Parent{ get; set; }
        [XmlElement("PolicyTypeRoutingCode")] 
        public string PolicyTypeRoutingCode { get; set; }
        [XmlElement("LineOfBusinessRoutingCode")]
        public string LineOfBusinessRoutingCode { get; set; }
        [XmlElement("TransactionFunction")]
        public string TransactionFunction { get; set; }
        [XmlElement("InformalTransactionAddress")] 
        public string InformalTransactionAddressSender { get; set; }
        [XmlElement("TransactionSequenceNumber")]
        public int TransactionSequenceNumber { get; set; }

        [XmlIgnore]
        public DateTime TransactionDate { get; set; }

        [XmlElement("TransactionDate")]
        public String TransactionDateStr
        {
            get { return TransactionDate.DateTimeToDateStr(); }
            set { this.TransactionDate = value.DateStrToDateTime(); }
        }

        [XmlIgnore]
        public DateTime TransactionEffectiveDate { get; set; }
        [XmlElement("TransactionEffectiveDate")]
        public String TransactionEffectiveDateStr
        {
            get { return TransactionEffectiveDate.DateTimeToDateStr(); }
            set { this.TransactionEffectiveDate = value.DateStrToDateTime(); }
        }

        [XmlIgnore]
        public BasicInsuredInformationGroup BasicInsuredInformationGroup { get; set; }
        [XmlIgnore]
        public BasicInsuredInformationExtensionGroup BasicInsuredInformationExtensionGroup { get; set; }

        public void Accept(IPolicyVisitor visitor)
        {
            visitor.VisitTransaction(this);
            //todo: other stuff
        }
    }
}

我的問題是關於 InformalTransactionAddressSender 屬性。 它對應於具有“ 2TRG14 ”的group_element值的 XML 元素InformalTransactionAddress 如何確保 XMlSerilaizer 選擇那個而不是值為 2TRG16 的那個?

似乎所需的元素包含內部文本,而另一個不包含。

下面我將展示如何為 XML 創建類(完整代碼在最后)。

鑒於以下 XML 結構,

<Root>
    <Message>
        <Transaction>
             ...
        </Transaction>
    </Message>
</Root>

我們將使用以下類名:

  • 根:
  • 根消息:“根”+“消息”
  • RootMessageTransaction: "RootMessage" + "Transaction"

對於“Transaction”下的任何包含屬性的元素,我們也將為它創建一個類。 我們將遵循與上述類似的命名策略。

例如: TransactionFunction將具有以下類名: RootMessageTransactionTransactionFunction

RootMessageTransactionTransactionFunction :

public class RootMessageTransactionTransactionFunction
{
    [XmlAttribute(AttributeName = "group_element")]
    public string group_element { get; set; }

    [XmlText]
    public string InnerText { get; set; } = string.Empty;

}

注意:如果元素有更多屬性,我們也會添加它們。

鑒於:

<TransactionFunction group_element="2TRG08">FMG</TransactionFunction>

內文為:FMG

用法

[XmlElement(ElementName = "TransactionFunction")]
public RootMessageTransactionTransactionFunction TransactionFunction { get; set; } = new RootMessageTransactionTransactionFunction();

由於FormalTransactionAddressInformalTransactionAddress出現不止一次,我們將為它們中的每一個使用一個 List。 我們還將添加對 InnerText 進行降序排序的功能——這會將包含 InnerText 值的元素放在索引 0 中。

FormalTransactionAddress將具有以下名稱: RootMessageTransactionFormalTransactionAddress

RootMessageTransactionFormalTransactionAddress :

public class RootMessageTransactionFormalTransactionAddress : IComparable<RootMessageTransactionFormalTransactionAddress>
{
    [XmlAttribute(AttributeName = "group_element")]
    public string group_element { get; set; }

    [XmlText]
    public string InnerText { get; set; } = string.Empty;

    public int CompareTo(RootMessageTransactionFormalTransactionAddress other)
    {
        //sort desc

        if (String.Compare(this.InnerText, other.InnerText, StringComparison.InvariantCultureIgnoreCase) == 0)
        {
            return 0;
        }
        else if (String.Compare(this.InnerText, other.InnerText, StringComparison.InvariantCultureIgnoreCase) > 0)
        {
            return -1; //sort desc
        }
        else
        {
            return 1;
        }
    }
}

用法

[XmlElement(ElementName = "FormalTransactionAddress")]
public List<RootMessageTransactionFormalTransactionAddress> FormalTransactionAddress { get; set; } = new List<RootMessageTransactionFormalTransactionAddress>();

下面是從 OP 反序列化 XML 所需的完整代碼。

創建一個類(名稱:RootMessageTransaction.cs)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;

namespace XmlSerialization6656
{
    public class RootMessageTransaction
    {
        [XmlElement(ElementName = "ApplicationSoftwareRevisionLevel")]
        public RootMessageTransactionApplicationSoftwareRevisionLevel ApplicationSoftwareRevisionLevel { get; set; } = new RootMessageTransactionApplicationSoftwareRevisionLevel();

        [XmlElement(ElementName = "AutomationLevel")]
        public RootMessageTransactionAutomationLevel AutomationLevel { get; set; } = new RootMessageTransactionAutomationLevel();

        [XmlElement(ElementName = "CycleBusinessPurpose")]
        public RootMessageTransactionCycleBusinessPurpose CycleBusinessPurpose { get; set; } = new RootMessageTransactionCycleBusinessPurpose();

        [XmlElement(ElementName = "DeletedTransactionDate")]
        public RootMessageTransactionDeletedTransactionDate DeletedTransactionDate { get; set; } = new RootMessageTransactionDeletedTransactionDate();

        [XmlElement(ElementName = "DeletedTransactionEffectiveDate")]
        public RootMessageTransactionDeletedTransactionEffectiveDate DeletedTransactionEffectiveDate { get; set; } = new RootMessageTransactionDeletedTransactionEffectiveDate();

        [XmlElement(ElementName = "DeletedYear2000LogicCode")]
        public RootMessageTransactionDeletedYear2000LogicCode DeletedYear2000LogicCode { get; set; } = new RootMessageTransactionDeletedYear2000LogicCode();

        [XmlElement(ElementName = "ErrorProcessingOption")]
        public RootMessageTransactionErrorProcessingOption ErrorProcessingOption { get; set; } = new RootMessageTransactionErrorProcessingOption();

        [XmlElement(ElementName = "FormalTransactionAddress")]
        public List<RootMessageTransactionFormalTransactionAddress> FormalTransactionAddress { get; set; } = new List<RootMessageTransactionFormalTransactionAddress>();

        [XmlElement(ElementName = "Header")]
        public RootMessageTransactionHeader Header { get; set; } = new RootMessageTransactionHeader();

        [XmlElement(ElementName = "InformalTransactionAddress")]
        public List<RootMessageTransactionInformalTransactionAddress> InformalTransactionAddress { get; set; } = new List<RootMessageTransactionInformalTransactionAddress>();

        [XmlElement(ElementName = "InitialTransactionMode")]
        public RootMessageTransactionInitialTransactionMode InitialTransactionMode { get; set; } = new RootMessageTransactionInitialTransactionMode();

        [XmlElement(ElementName = "LineOfBusinessRoutingCode")]
        public RootMessageTransactionLineOfBusinessRoutingCode LineOfBusinessRoutingCode { get; set; } = new RootMessageTransactionLineOfBusinessRoutingCode();

        [XmlElement(ElementName = "OriginationReferenceInformation")]
        public RootMessageTransactionOriginationReferenceInformation OriginationReferenceInformation { get; set; } = new RootMessageTransactionOriginationReferenceInformation();

        [XmlElement(ElementName = "PolicyTypeRoutingCode")]
        public RootMessageTransactionPolicyTypeRoutingCode PolicyTypeRoutingCode { get; set; } = new RootMessageTransactionPolicyTypeRoutingCode();

        [XmlElement(ElementName = "ProcessingCycleNumber")]
        public RootMessageTransactionProcessingCycleNumber ProcessingCycleNumber { get; set; } = new RootMessageTransactionProcessingCycleNumber();

        [XmlElement(ElementName = "ProcessingCycleStatus")]
        public RootMessageTransactionProcessingCycleStatus ProcessingCycleStatus { get; set; } = new RootMessageTransactionProcessingCycleStatus();

        [XmlElement(ElementName = "QuoteDate")]
        public RootMessageTransactionQuoteDate QuoteDate { get; set; } = new RootMessageTransactionQuoteDate();

        [XmlElement(ElementName = "ReferenceTransactionSequenceNumber")]
        public RootMessageTransactionReferenceTransactionSequenceNumber ReferenceTransactionSequenceNumber { get; set; } = new RootMessageTransactionReferenceTransactionSequenceNumber();

        [XmlElement(ElementName = "ResponseAutomationLevel")]
        public RootMessageTransactionResponseAutomationLevel ResponseAutomationLevel { get; set; } = new RootMessageTransactionResponseAutomationLevel();

        [XmlElement(ElementName = "SegmentedTransactionCounter")]
        public RootMessageTransactionSegmentedTransactionCounter SegmentedTransactionCounter { get; set; } = new RootMessageTransactionSegmentedTransactionCounter();

        [XmlElement(ElementName = "SegmentedTransactionTotalPieces")]
        public RootMessageTransactionSegmentedTransactionTotalPieces SegmentedTransactionTotalPieces { get; set; } = new RootMessageTransactionSegmentedTransactionTotalPieces();

        [XmlElement(ElementName = "SegmentLevelCode")]
        public RootMessageTransactionSegmentLevelCode SegmentLevelCode { get; set; } = new RootMessageTransactionSegmentLevelCode();

        [XmlElement(ElementName = "SpecialHandling")]
        public RootMessageTransactionSpecialHandling SpecialHandling { get; set; } = new RootMessageTransactionSpecialHandling();

        [XmlElement(ElementName = "SpecialResponseOption")]
        public RootMessageTransactionSpecialResponseOption SpecialResponseOption { get; set; } = new RootMessageTransactionSpecialResponseOption();

        [XmlElement(ElementName = "SynchronizationField")]
        public RootMessageTransactionSynchronizationField SynchronizationField { get; set; } = new RootMessageTransactionSynchronizationField();

        [XmlElement(ElementName = "TransactionCategory")]
        public RootMessageTransactionTransactionCategory TransactionCategory { get; set; } = new RootMessageTransactionTransactionCategory();

        [XmlElement(ElementName = "TransactionDate")]
        public RootMessageTransactionTransactionDate TransactionDate { get; set; } = new RootMessageTransactionTransactionDate();

        [XmlElement(ElementName = "TransactionEffectiveDate")]
        public RootMessageTransactionTransactionEffectiveDate TransactionEffectiveDate { get; set; } = new RootMessageTransactionTransactionEffectiveDate();

        [XmlElement(ElementName = "TransactionFunction")]
        public RootMessageTransactionTransactionFunction TransactionFunction { get; set; } = new RootMessageTransactionTransactionFunction();

        [XmlElement(ElementName = "TransactionImage")]
        public RootMessageTransactionTransactionImage TransactionImage { get; set; } = new RootMessageTransactionTransactionImage();

        [XmlElement(ElementName = "TransactionSequenceNumber")]
        public RootMessageTransactionTransactionSequenceNumber TransactionSequenceNumber { get; set; } = new RootMessageTransactionTransactionSequenceNumber();

        [XmlElement(ElementName = "TransactionStructureStandardVersionNumber")]
        public RootMessageTransactionTransactionStructureStandardVersionNumber TransactionStructureStandardVersionNumber { get; set; } = new RootMessageTransactionTransactionStructureStandardVersionNumber();

    }

    public class RootMessageTransactionApplicationSoftwareRevisionLevel
    {
        [XmlAttribute(AttributeName = "group_element")]
        public string group_element { get; set; }

        [XmlText]
        public string InnerText { get; set; } = string.Empty;
    }

    public class RootMessageTransactionAutomationLevel
    {
        [XmlAttribute(AttributeName = "group_element")]
        public string group_element { get; set; }

        [XmlText]
        public string InnerText { get; set; } = string.Empty;
    }

    public class RootMessageTransactionCycleBusinessPurpose
    {
        [XmlAttribute(AttributeName = "group_element")]
        public string group_element { get; set; }

        [XmlText]
        public string InnerText { get; set; } = string.Empty;
    }

    public class RootMessageTransactionDeletedTransactionDate
    {
        [XmlAttribute(AttributeName = "group_element")]
        public string group_element { get; set; }

        [XmlText]
        public string InnerText { get; set; } = string.Empty;
    }

    public class RootMessageTransactionDeletedTransactionEffectiveDate
    {
        [XmlAttribute(AttributeName = "group_element")]
        public string group_element { get; set; }

        [XmlText]
        public string InnerText { get; set; } = string.Empty;
    }

    public class RootMessageTransactionDeletedYear2000LogicCode
    {
        [XmlAttribute(AttributeName = "group_element")]
        public string group_element { get; set; }

        [XmlText]
        public string InnerText { get; set; } = string.Empty;
    }

    public class RootMessageTransactionErrorProcessingOption
    {
        [XmlAttribute(AttributeName = "group_element")]
        public string group_element { get; set; }

        [XmlText]
        public string InnerText { get; set; } = string.Empty;
    }

    public class RootMessageTransactionFormalTransactionAddress : IComparable<RootMessageTransactionFormalTransactionAddress>
    {
        [XmlAttribute(AttributeName = "group_element")]
        public string group_element { get; set; }

        [XmlText]
        public string InnerText { get; set; } = string.Empty;

        public int CompareTo(RootMessageTransactionFormalTransactionAddress other)
        {
            //sort desc

            if (String.Compare(this.InnerText, other.InnerText, StringComparison.InvariantCultureIgnoreCase) == 0)
            {
                return 0;
            }
            else if (String.Compare(this.InnerText, other.InnerText, StringComparison.InvariantCultureIgnoreCase) > 0)
            {
                return -1; //sort desc
            }
            else
            {
                return 1;
            }
        }
    }

    public class RootMessageTransactionHeader
    {
        [XmlAttribute(AttributeName = "group_element")]
        public string group_element { get; set; }

        [XmlText]
        public string InnerText { get; set; } = string.Empty;
    }

    public class RootMessageTransactionInformalTransactionAddress : IComparable<RootMessageTransactionInformalTransactionAddress>
    {
        [XmlAttribute(AttributeName = "group_element")]
        public string group_element { get; set; }

        [XmlText]
        public string InnerText { get; set; } = string.Empty;

        public int CompareTo(RootMessageTransactionInformalTransactionAddress other)
        {
            //sort desc

            if (String.Compare(this.InnerText, other.InnerText, StringComparison.InvariantCultureIgnoreCase) == 0)
            {
                return 0;
            }
            else if (String.Compare(this.InnerText, other.InnerText, StringComparison.InvariantCultureIgnoreCase) > 0)
            {
                return -1; //sort desc
            }
            else
            {
                return 1;
            }
        }
    }

    public class RootMessageTransactionInitialTransactionMode
    {
        [XmlAttribute(AttributeName = "group_element")]
        public string group_element { get; set; }

        [XmlText]
        public string InnerText { get; set; } = string.Empty;
    }

    public class RootMessageTransactionLineOfBusinessRoutingCode
    {
        [XmlAttribute(AttributeName = "group_element")]
        public string group_element { get; set; }

        [XmlText]
        public string InnerText { get; set; } = string.Empty;
    }

    public class RootMessageTransactionOriginationReferenceInformation
    {
        [XmlAttribute(AttributeName = "group_element")]
        public string group_element { get; set; }

        [XmlText]
        public string InnerText { get; set; } = string.Empty;
    }

    public class RootMessageTransactionPolicyTypeRoutingCode
    {
        [XmlAttribute(AttributeName = "group_element")]
        public string group_element { get; set; }

        [XmlText]
        public string InnerText { get; set; } = string.Empty;
    }

    public class RootMessageTransactionProcessingCycleNumber
    {
        [XmlAttribute(AttributeName = "group_element")]
        public string group_element { get; set; }

        [XmlText]
        public string InnerText { get; set; } = string.Empty;
    }

    public class RootMessageTransactionProcessingCycleStatus
    {
        [XmlAttribute(AttributeName = "group_element")]
        public string group_element { get; set; }

        [XmlText]
        public string InnerText { get; set; } = string.Empty;
    }

    public class RootMessageTransactionQuoteDate
    {
        [XmlAttribute(AttributeName = "group_element")]
        public string group_element { get; set; }

        [XmlText]
        public string InnerText { get; set; } = string.Empty;
    }

    public class RootMessageTransactionReferenceTransactionSequenceNumber
    {
        [XmlAttribute(AttributeName = "group_element")]
        public string group_element { get; set; }

        [XmlText]
        public string InnerText { get; set; } = string.Empty;
    }

    public class RootMessageTransactionResponseAutomationLevel
    {
        [XmlAttribute(AttributeName = "group_element")]
        public string group_element { get; set; }

        [XmlText]
        public string InnerText { get; set; } = string.Empty;
    }

    public class RootMessageTransactionSegmentedTransactionCounter
    {
        [XmlAttribute(AttributeName = "group_element")]
        public string group_element { get; set; }

        [XmlText]
        public string InnerText { get; set; } = string.Empty;
    }

    public class RootMessageTransactionSegmentedTransactionTotalPieces
    {
        [XmlAttribute(AttributeName = "group_element")]
        public string group_element { get; set; }

        [XmlText]
        public string InnerText { get; set; } = string.Empty;
    }

    public class RootMessageTransactionSegmentLevelCode
    {
        [XmlAttribute(AttributeName = "group_element")]
        public string group_element { get; set; }

        [XmlText]
        public string InnerText { get; set; } = string.Empty;
    }

    public class RootMessageTransactionSpecialHandling
    {
        [XmlAttribute(AttributeName = "group_element")]
        public string group_element { get; set; }

        [XmlText]
        public string InnerText { get; set; } = string.Empty;
    }

    public class RootMessageTransactionSpecialResponseOption
    {
        [XmlAttribute(AttributeName = "group_element")]
        public string group_element { get; set; }

        [XmlText]
        public string InnerText { get; set; } = string.Empty;
    }

    public class RootMessageTransactionSynchronizationField
    {
        [XmlAttribute(AttributeName = "group_element")]
        public string group_element { get; set; }

        [XmlText]
        public string InnerText { get; set; } = string.Empty;
    }

    public class RootMessageTransactionTransactionCategory
    {
        [XmlAttribute(AttributeName = "group_element")]
        public string group_element { get; set; }

        [XmlText]
        public string InnerText { get; set; } = string.Empty;
    }

    public class RootMessageTransactionTransactionDate
    {
        [XmlAttribute(AttributeName = "group_element")]
        public string group_element { get; set; }

        [XmlText]
        public string InnerText { get; set; } = string.Empty;
    }

    public class RootMessageTransactionTransactionEffectiveDate
    {
        [XmlAttribute(AttributeName = "group_element")]
        public string group_element { get; set; }

        [XmlText]
        public string InnerText { get; set; } = string.Empty;
    }

    public class RootMessageTransactionTransactionFunction
    {
        [XmlAttribute(AttributeName = "group_element")]
        public string group_element { get; set; }

        [XmlText]
        public string InnerText { get; set; } = string.Empty;
    }

    public class RootMessageTransactionTransactionImage
    {
        [XmlAttribute(AttributeName = "group_element")]
        public string group_element { get; set; }

        [XmlText]
        public string InnerText { get; set; } = string.Empty;
    }

    public class RootMessageTransactionTransactionSequenceNumber
    {
        [XmlAttribute(AttributeName = "group_element")]
        public string group_element { get; set; }

        [XmlText]
        public string InnerText { get; set; } = string.Empty;
    }

    public class RootMessageTransactionTransactionStructureStandardVersionNumber
    {
        [XmlAttribute(AttributeName = "group_element")]
        public string group_element { get; set; }

        [XmlText]
        public string InnerText { get; set; } = string.Empty;
    }
}

創建一個類(名稱:RootMessage.cs)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;

namespace XmlSerialization6656
{
    public class RootMessage
    {
        [XmlElement(ElementName = "Transaction")]
        public RootMessageTransaction Transaction { get; set; } = new RootMessageTransaction();
    }
}

創建一個類(名稱:Root.cs)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;

namespace XmlSerialization6656
{
    [XmlRoot(ElementName = "Root", IsNullable = false)]
    public class Root
    {
       [XmlElement(ElementName = "Message")]
       public RootMessage Message { get; set; } = new RootMessage();
    }
}

創建一個類(名稱:HelperXml.cs)

注意:此類用於序列化和反序列化方法。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace XmlSerialization6656
{
    public class HelperXml
    {
        public static T DeserializeXMLFileToObject<T>(string xmlFilename)
        {
            //Usage: Class1 myClass1 = DeserializeXMLFileToObject<Class1>(xmlFilename);

            T rObject = default(T);

            try
            {
                if (string.IsNullOrEmpty(xmlFilename))
                {
                    return default(T);
                }

                using (System.IO.StreamReader xmlStream = new System.IO.StreamReader(xmlFilename))
                {


                    System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(T));
                    rObject = (T)serializer.Deserialize(xmlStream);
                }
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(ex.Message);
                throw ex;
            }

            return rObject;
        }


        public static void SerializeObjectToXMLFile(object obj, string xmlFilename)
        {
            //Usage: Class1 myClass1 = new Class1();
            //SerializeObjectToXMLFile(myClass1, xmlFilename);

            try
            {
                if (string.IsNullOrEmpty(xmlFilename))
                {
                    return;
                }//if

                System.Xml.XmlWriterSettings settings = new System.Xml.XmlWriterSettings();
                settings.OmitXmlDeclaration = false;
                settings.Indent = true;
                settings.NewLineHandling = System.Xml.NewLineHandling.Entitize;

                using (System.Xml.XmlWriter xmlWriter = System.Xml.XmlWriter.Create(xmlFilename, settings))
                {
                    //specify namespaces
                    System.Xml.Serialization.XmlSerializerNamespaces ns = new System.Xml.Serialization.XmlSerializerNamespaces();
                    ns.Add(string.Empty, "urn:none");

                    //create new instance
                    System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(obj.GetType());

                    //write XML to file
                    serializer.Serialize(xmlWriter, obj, ns);

                }
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(ex.Message);
                throw ex;
            }
        }
    }
}

用法

//deserialize - get XML from file
Root root = HelperXml.DeserializeXMLFileToObject<Root>(xmlFilename);

//serialize - save XML to file
HelperXml.SerializeObjectToXMLFile(root, xmlFilename);

示例

private void GetXmlData(string xmlFilename)
{
    //get XML
    Root root = HelperXml.DeserializeXMLFileToObject<Root>(xmlFilename);

    Debug.WriteLine("Header: " + root.Message.Transaction.Header.InnerText);

    //sort
    root.Message.Transaction.FormalTransactionAddress.Sort();

    foreach (var fta in root.Message.Transaction.FormalTransactionAddress)
    {
        Debug.WriteLine("FormalTransactionAddress: group_element: " + fta.group_element + " InnerText: " + fta.InnerText);
    }

    //sort
    root.Message.Transaction.InformalTransactionAddress.Sort();

    foreach (var fta in root.Message.Transaction.InformalTransactionAddress)
    {
        Debug.WriteLine("InformalTransactionAddress: group_element: " + fta.group_element + " InnerText: " + fta.InnerText);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM