You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用C#原生方式实现类似T-SQL FOR XML RAW模式的DataTable序列化?

问题解答

C#没有直接对应FOR XML RAW模式的原生DataTable序列化方法。DataTable.WriteXml()默认生成的是类似PATH模式的嵌套元素结构,没法直接输出属性化的XML格式。

如果要实现类似RAW的效果,你可以手动构建XML,以下是两种可行的实现方式:

方式一:使用XmlWriter手动构建

using System;
using System.Data;
using System.Xml;
using System.IO;

public static string ConvertDataTableToRawXml(DataTable dataTable, string elementName = "row")
{
    var xmlSettings = new XmlWriterSettings { Indent = true, OmitXmlDeclaration = true };
    using var stringWriter = new StringWriter();
    using var xmlWriter = XmlWriter.Create(stringWriter, xmlSettings);

    foreach (DataRow row in dataTable.Rows)
    {
        xmlWriter.WriteStartElement(elementName);
        foreach (DataColumn column in dataTable.Columns)
        {
            xmlWriter.WriteAttributeString(column.ColumnName, row[column]?.ToString());
        }
        xmlWriter.WriteEndElement();
    }
    xmlWriter.Flush();
    return stringWriter.ToString();
}

方式二:使用LINQ to XML简化实现

using System.Data;
using System.Linq;
using System.Xml.Linq;

public static string ConvertDataTableToRawXmlLinq(DataTable dataTable, string elementName = "row")
{
    var xmlElements = dataTable.Rows.Cast<DataRow>()
        .Select(row => new XElement(elementName,
            dataTable.Columns.Cast<DataColumn>()
                .Select(col => new XAttribute(col.ColumnName, row[col]?.ToString()))));

    return string.Join(System.Environment.NewLine, xmlElements);
}

效果示例

假设你的DataTable数据如下:

Column_1 Column_2
-------- --------
one      1
two      2

调用上述任意方法后,会生成和FOR XML RAW一致的输出:

<row Column_1="one" Column_2="1" />
<row Column_1="two" Column_2="2" />

内容的提问来源于stack exchange,提问作者Mauricio Ortega

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 07:35:37