[英]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&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>
兩件事情:
這是我目前的課程(正在進行中)
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>
我們將使用以下類名:
對於“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();
由於FormalTransactionAddress
和InformalTransactionAddress
出現不止一次,我們將為它們中的每一個使用一個 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.