首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 實體集合與單一實體轉換為 XML、XElement、XDocument 完整指南

     編輯:關於C#

前言:專注於「物件轉 XML」的輕量工具

承接上篇「XML Attribute 匹配」,本文專注於將實體物件或集合序列化為各種 XML 表示形式 (string、XElement、XDocument、XmlDocument),採用重構簡化程式碼,不處理屬性別名,純示範核心轉換邏輯。

核心類別:SimpleXmlConverter

靜態類別提供 7 個公開方法,涵蓋單一實體與集合的各種輸出需求:

1. 實體集合 → XML 字串 (含宣告)

public static string ToXml<T>(IList<T> entities, string rootName = "") where T : new()
{
    if (entities == null || entities.Count == 0) return string.Empty;
    var sb = new StringBuilder();
    sb.AppendLine(XmlResource.XmlHeader); // 
    XElement element = ToXElement(entities, rootName);
    sb.Append(element.ToString());
    return sb.ToString();
}

輸出範例:

<?xml version="1.0" encoding="utf-8"?>
<MapperInfoSet>
  <MapperInfo>
    <Name>MapperInfoIndex0</Name>
    <CreatedTime>2012-02-19T08:54:44.9411601+08:00</CreatedTime>
    ...
  </MapperInfo>
</MapperInfoSet>

2. 單一實體 → XML 字串

public static string ToXml<T>(T entity) where T : new()
{
    if (entity == null) return string.Empty;
    return ToXElement(entity).ToString();
}

3. 實體集合 → XElement (可指定根節點名)

public static XElement ToXElement<T>(IList<T> entities, string rootName = "") where T : new()
{
    if (entities == null || entities.Count == 0) return null;
    if (string.IsNullOrWhiteSpace(rootName)) rootName = typeof(T).Name + XmlResource.XmlRootNameSuffix; // 預設 "MapperInfoSet"
    XElement root = new XElement(rootName);
    foreach (T entity in entities) root.Add(ToXElement(entity));
    return root;
}

4. 實體集合 → XmlDocument

public static XmlDocument ToXmlDocument<T>(IList<T> entities, string rootName = "") where T : new()
{
    if (entities == null || entities.Count == 0) return null;
    XmlDocument doc = new XmlDocument();
    doc.LoadXml(ToXml(entities, rootName));
    return doc;
}

5. 單一實體 → XElement (核心邏輯)

public static XElement ToXElement<T>(T entity) where T : new()
{
    if (entity == null) return null;
    XElement element = new XElement(typeof(T).Name);
    foreach (PropertyInfo prop in typeof(T).GetProperties())
    {
        object val = prop.GetValue(entity, null);
        element.Add(new XElement(prop.Name, val));
    }
    return element;
}

6. 實體集合 → XDocument

public static XDocument ToXDocument<T>(IList<T> entities, string rootName = "") where T : new()
{
    if (entities == null || entities.Count == 0) return null;
    return XDocument.Parse(ToXml(entities, rootName));
}

7. 單一型別 → 空值 XElement 模板 (輔助用)

public static XElement ToXElement(Type type)
{
    if (type == null) return null;
    XElement element = new XElement(type.Name);
    foreach (PropertyInfo prop in type.GetProperties())
        element.Add(new XElement(prop.Name, null));
    return element;
}

設計亮點

  • 方法重構鏈:集合方法呼叫單一實體方法,單一實體方法為核心,減少重複碼。
  • LINQ to XML 優勢:物件導向建構 XML,自動處理編碼、逸出字元等細節。
  • 彈性根節點命名:支援自訂或預設 類別名+Set。

總結

轉換邏輯極簡單,關鍵在於善用 XElement 建構樹狀結構,再轉為所需輸出格式。下篇將示範如何解析本文產出的 XML 結構。

作者:JasenKin | 出處:https://www.cnblogs.com/jasenkin/

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved