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

如何通过C#代码(非VS界面/命令行)从XML文件生成C#类?求NuGet方案

通过C#代码实现XML到C#类的转换(无需VS界面/命令行)

要直接用C#代码完成XML到C#类的生成,以下是几个实用的NuGet包及具体实现方案:

1. XmlToCSharp

这个包可以直接从XML字符串生成C#类代码,无需中转XSD,适合简单XML场景。

安装包

在项目中执行NuGet安装命令:

Install-Package XmlToCSharp

代码示例

using XmlToCSharp;
using System.IO;

// 待转换的XML内容
string xmlContent = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
<Person>
    <Id>3344</Id>
    <Name>Ahmed Shaikoun</Name>
    <Title>Software Engineer</Title>
    <Country>Egypt</Country>
    <Phone>0xx-xxxxxxxxx</Phone>
</Person>";

// 生成指定类名的C#代码
string classCode = XmlConverter.ConvertXmlToCSharp(xmlContent, "Person");

// 将代码写入文件(也可直接在内存中使用)
File.WriteAllText("Person.cs", classCode);

生成的类会自动带上XmlSerializer所需的特性,示例输出:

using System.Xml.Serialization;

[XmlRoot(ElementName="Person")]
public class Person {
    [XmlElement(ElementName="Id")]
    public string Id { get; set; }
    [XmlElement(ElementName="Name")]
    public string Name { get; set; }
    [XmlElement(ElementName="Title")]
    public string Title { get; set; }
    [XmlElement(ElementName="Country")]
    public string Country { get; set; }
    [XmlElement(ElementName="Phone")]
    public string Phone { get; set; }
}

2. Xsd2Code.Core

如果需要更灵活的配置(比如自定义序列化方式、生成数据注解、选择集合类型等),可以使用这个包。流程是先从XML推断出XSD,再基于XSD生成C#类。

安装包

Install-Package Xsd2Code.Core

代码示例

using System.Xml;
using System.IO;
using Xsd2Code.Library;
using Xsd2Code.Library.Helpers;

string xmlContent = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
<Person>
    <Id>3344</Id>
    <Name>Ahmed Shaikoun</Name>
    <Title>Software Engineer</Title>
    <Country>Egypt</Country>
    <Phone>0xx-xxxxxxxxx</Phone>
</Person>";

// 第一步:从XML推断生成XSD
XmlReader reader = XmlReader.Create(new StringReader(xmlContent));
XmlSchemaInference inference = new XmlSchemaInference();
XmlSchemaSet schemaSet = inference.InferSchema(reader);

// 将XSD转为字符串
StringWriter xsdWriter = new StringWriter();
foreach (XmlSchema schema in schemaSet.Schemas())
{
    schema.Write(xsdWriter);
}
string xsdContent = xsdWriter.ToString();

// 第二步:配置生成参数
GeneratorParams genParams = new GeneratorParams();
genParams.ClassName = "Person";
genParams.TargetLanguage = Language.CSharp;
genParams.Serializer = SerializerType.XmlSerializer;
genParams.CollectionType = CollectionType.List;
genParams.GenerateXMLAttributes = true; // 生成XML特性

// 生成C#类代码
string classCode = Generator.Generate(xsdContent, genParams);

// 写入文件
File.WriteAllText("Person.cs", classCode);

这个包支持大量自定义选项,比如是否生成注释、是否启用可空类型、选择序列化框架(XmlSerializer/DataContractSerializer)等,适合复杂XML结构的转换。

3. 原生.NET实现(无第三方依赖)

如果不想引入NuGet包,也可以用.NET自带的System.Xml.Schema和System.CodeDom组件实现,不过代码相对繁琐,可控性有限。

代码示例

using System.CodeDom;
using System.CodeDom.Compiler;
using System.Xml;
using System.Xml.Schema;
using System.IO;
using Microsoft.CSharp;

string xmlContent = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
<Person>
    <Id>3344</Id>
    <Name>Ahmed Shaikoun</Name>
    <Title>Software Engineer</Title>
    <Country>Egypt</Country>
    <Phone>0xx-xxxxxxxxx</Phone>
</Person>";

// 从XML推断XSD
XmlReader reader = XmlReader.Create(new StringReader(xmlContent));
XmlSchemaInference inference = new XmlSchemaInference();
XmlSchemaSet schemaSet = inference.InferSchema(reader);

// 导出XSD到CodeDom对象
CodeNamespace codeNamespace = new CodeNamespace("YourApp.Models");
XmlCodeExporter exporter = new XmlCodeExporter(codeNamespace);
foreach (XmlSchema schema in schemaSet.Schemas())
{
    foreach (XmlSchemaObject schemaObj in schema.Items)
    {
        if (schemaObj is XmlSchemaElement element)
        {
            exporter.ExportElement(element, new CodeIdentifier("Person"));
        }
    }
}

// 生成C#代码
CodeCompileUnit compileUnit = new CodeCompileUnit();
compileUnit.Namespaces.Add(codeNamespace);
CSharpCodeProvider codeProvider = new CSharpCodeProvider();
StringWriter codeWriter = new StringWriter();
codeProvider.GenerateCodeFromCompileUnit(compileUnit, codeWriter, new CodeGeneratorOptions());

string classCode = codeWriter.ToString();
File.WriteAllText("Person.cs", classCode);

内容的提问来源于stack exchange,提问作者Thai Quoc Toan K15 HCM

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 10:37:00