C# DataTable 转换为 实体类对象实例

C# DataTable转换为实体类对象实例是一个很常见的操作,下面是详细的攻略。

步骤一:创建实体类

首先创建一个实体类,其中的属性需要与DataTable里面的字段名称和数据类型一一对应。

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
}

步骤二:获取DataTable数据

使用Ado.Net或者第三方库获取数据并存储在DataTable中。

using (var conn = new SqlConnection("Your Connection String"))
{
    conn.Open();
    var command = new SqlCommand("SELECT * FROM Persons", conn);
    var table = new DataTable();
    var reader = command.ExecuteReader();
    table.Load(reader);
    reader.Dispose();
    conn.Close();
}

步骤三:将DataTable转换为json字符串

可以使用Json.Net将DataTable转换为Json字符串,以便于后续操作。

var json = JsonConvert.SerializeObject(table);

步骤四:将json字符串反序列化为实体对象

使用Json.Net反序列化json字符串将其转换为实体对象的List。

var list = JsonConvert.DeserializeObject<List<Person>>(json);

示例一:使用System.Xml.Serialization

using System.Xml.Serialization;
using System.IO;

public static List<T> ConvertDataTableToEntityList<T>(DataTable table)
{
    var xml = "";
    using (var memoryStream = new MemoryStream())
    {
        using (TextWriter streamWriter = new StreamWriter(memoryStream))
        {
            table.WriteXml(streamWriter);
            xml = Encoding.UTF8.GetString(memoryStream.ToArray());
        }
    }

    using (var stringReader = new StringReader(xml))
    {
        var ser = new XmlSerializer(typeof(List<T>));
        return (List<T>)ser.Deserialize(stringReader);
    }
}

示例二:使用Reflection

using System.Reflection;

public static List<T> ConvertDataTableToEntityList<T>(DataTable table) where T : new()
{
    var list = new List<T>();
    var type = typeof(T);
    var properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance).ToList();

    foreach (var row in table.Rows)
    {
        var obj = new T();

        foreach (var property in properties)
        {
            if (table.Columns.Contains(property.Name) && row[property.Name] != DBNull.Value)
            {
                var value = Convert.ChangeType(row[property.Name], property.PropertyType);
                property.SetValue(obj, value, null);
            }
        }

        list.Add(obj);
    }

    return list;
}

以上就是将C# DataTable转换为实体类对象实例的完整攻略,其中包含了两个示例来作详细讲解。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# DataTable 转换为 实体类对象实例 - Python技术站

(0)
上一篇 2023年6月1日
下一篇 2023年6月1日

相关文章

  • C#资源释放方法实例分析

    C#资源释放方法实例分析 在使用C#编写程序时,资源释放问题是一个非常重要的问题。如果不恰当地处理资源释放,可能会导致内存泄漏等问题,影响程序性能和稳定性。本文将详细介绍C#中的资源释放方法,以及如何在代码中进行实际应用。 1. 资源释放的方法 C#中的资源释放主要分为两种方式:手动释放和自动释放。 1.1 手动释放 手动释放是指程序员在编写代码时,手动调用…

    C# 2023年5月15日
    00
  • C#实现闹钟AlarmClock实例代码

    下面是详细讲解“C#实现闹钟AlarmClock实例代码”的完整攻略: 1. 确定需求 我们要实现一个简单的闹钟程序,具有设置闹钟时间、开启闹钟、关闭闹钟等功能。 2. 创建C#控制台应用程序 打开Visual Studio,选择“新建项目”,选择“Visual C#”类型,“控制台应用程序”模板,输入项目名称,点击“创建”按钮。这样就创建了一个空白的控制台…

    C# 2023年6月6日
    00
  • C#实现的滚动网页截图功能示例

    C#实现滚动网页截图功能攻略 1. 概述 滚动截图是一种常见的网页截图技术,它可以将整个页面的截图多次拼接在一起,形成完整的网页截图。本文将介绍通过C#编写实现滚动网页截图功能。 2. 实现思路 使用WebBrowser控件作为载体,在WebBrowser控件中载入网页,通过Javascript将网页的滚动条滚动到底部,将页面的高度计算出来。 将WebBro…

    C# 2023年6月6日
    00
  • C#浅拷贝和深拷贝实例解析

    下面我将详细介绍一下 “C#浅拷贝和深拷贝实例解析” 的完整攻略。 一、浅拷贝和深拷贝的概念 在 C# 中,对象的拷贝方式有两种:浅拷贝和深拷贝。浅拷贝只是复制对象的引用,而不复制引用对象本身;深拷贝则是复制所有的引用对象。 二、浅拷贝和深拷贝的实现 1. 实现浅拷贝 在 C# 中,想要实现对象的浅拷贝,我们可以在该对象中添加一个 Clone() 方法。在 …

    C# 2023年5月31日
    00
  • ASP.NET Core管理应用程序状态

    ASP.NET Core管理应用程序状态攻略 ASP.NET Core是一个跨平台的开源Web框架,它提供了一种灵活的方式来管理应用程序状态。本攻略将详细介绍如何在ASP.NET Core中管理应用程序状态,并提供两个示例说明。 状态管理 在ASP.NET Core中,状态管理是指跟踪应用程序的状态,以便在不同的请求之间共享数据。ASP.NET Core提供…

    C# 2023年5月16日
    00
  • .NET中创建对象的几种方式和对比

    一、.NET中创建对象的几种方式 .NET中创建对象的方式有以下几种: 使用new操作符创建对象 使用Activator.CreateInstance方法创建对象 使用反射及ConstructorInfo类创建对象 使用Object类的MemberwiseClone()方法创建对象 使用FormatterServices.GetUninitializedOb…

    C# 2023年6月1日
    00
  • 理解C#中的事件

    理解C#中的事件可以分为以下几个步骤: 1. 事件的定义 在C#中,可以通过delegate关键字定义一个委托类型,并在委托类型的参数列表中定义事件所需要传递的参数,例如: public delegate void EventHandler(object sender, EventArgs e); 其中,EventHandler就是一个委托类型,它有两个参数…

    C# 2023年5月14日
    00
  • C#请求唯一性校验支持高并发的实现方法

    C#请求唯一性校验支持高并发的实现方法 本文将介绍如何在C#中实现高并发请求唯一性校验的方法。在一些需要保证数据一致性和避免重复提交的场景中,唯一性校验是至关重要的。 前提条件 在实现高并发请求唯一性校验之前,我们需要了解以下前提条件: 多线程编程 分布式锁 1. 基于内存实现 实现思路 首先我们可以考虑使用一份内存缓存来记录每个请求是否已经提交,如果该请求…

    C# 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部