您的位置:

从Datatable到JSON:多角度详解

一、Datatable转JSON对象

Datatable是用于存储和操作数据表的类,它是.NET中最常用的数据结构之一。我们可以使用Newtonsoft.Json或System.Text.Json等库将Datatable转换成JSON对象,以便于在Web和移动应用程序中进行传输。下面是一个将Datatable转换成JSON对象的示例代码:

DataTable dt = new DataTable();
dt.Columns.Add("ID", typeof(int));
dt.Columns.Add("Name", typeof(string));
dt.Rows.Add(1, "Alice");
dt.Rows.Add(2, "Bob");
dt.Rows.Add(3, "Cathy");

JArray jsonArray = new JArray();

foreach (DataRow row in dt.Rows)
{
    JObject json = new JObject();
    foreach (DataColumn col in dt.Columns)
    {
        json.Add(col.ColumnName, JToken.FromObject(row[col]));
    }
    jsonArray.Add(json);
}

string jsonText = jsonArray.ToString();

上述代码首先创建一个DataTable对象,并添加三个列和三行数据。然后使用JArray和JObject类将Datatable转换成JSON对象。最后,使用ToString()方法将JSON对象转换成JSON字符串。

二、Datatable转JSON字符串

将Datatable转换成JSON字符串可以使用Newtonsoft.Json库的JsonConvert.SerializeObject()方法。下面是一个将Datatable转换成JSON字符串的示例代码:

string jsonText = JsonConvert.SerializeObject(dt, Formatting.Indented);

上述代码中,JsonConvert.SerializeObject()方法接受一个Datatable对象和一个Formatting枚举值,用于指定JSON字符串的格式。Formatting.Indented会将JSON字符串进行缩进,让数据更易读。此外,我们还可以通过使用JsonConvert.SerializeObject()方法的重载版本来转换任何.NET对象,而不仅仅是Datatable。

三、Datatable转JSON C#

使用C#代码将Datatable转换成JSON字符串可以使用JsonConvert.SerializeObject()方法。下面是一个将Datatable转换成JSON字符串的示例代码:

string jsonText = JsonConvert.SerializeObject(dt, Formatting.Indented);

上述代码中,我们使用JsonConvert.SerializeObject()方法将Datatable对象转换成JSON字符串。Formatting.Indented选项用于在生成的JSON字符串中添加缩进,以提高可读性。

四、Datatable转JSON带类型

在某些情况下,我们希望将JSON字符串转换回Datatable时保留列的数据类型。使用Newtonsoft.Json库的JsonConvert.SerializeObject()方法可以轻松实现这一点。下面是一个将Datatable和列的数据类型一起转换成JSON字符串的示例代码:

JsonSerializerSettings settings = new JsonSerializerSettings
{
    TypeNameHandling = TypeNameHandling.All
};

string jsonText = JsonConvert.SerializeObject(dt, Formatting.Indented, settings);

上述代码中,我们使用JsonSerializerSettings对象指定TypeNameHandling.All选项,以便在生成的JSON字符串中添加类型信息。当我们将JSON字符串转换回Datatable时,JsonConvert.DeserializeObject()方法可以根据类型信息将JSON字符串转换回正确的.NET对象。

五、Datatable转JSON WebAPI

在WebAPI中,我们可以使用System.Web.Http.Results命名空间下的JsonResult类将Datatable对象转换成JSON格式的响应。下面是一个将Datatable转换成JSON格式响应的WebAPI示例代码:

public JsonResult Get()
{
    DataTable dt = new DataTable();
    dt.Columns.Add("ID", typeof(int));
    dt.Columns.Add("Name", typeof(string));
    dt.Rows.Add(1, "Alice");
    dt.Rows.Add(2, "Bob");
    dt.Rows.Add(3, "Cathy");

    return Json(dt, JsonRequestBehavior.AllowGet);
}

  

上述代码中,我们创建了一个Datatable对象,并使用JsonResult将其转换成JSON格式的响应。JsonResult的构造函数接受一个Datatable对象和JsonRequestBehavior.AllowGet选项用于指示允许GET请求访问资源。

六、Datatable转数组

将Datatable转换成数组可以使用LINQ查询语言。下面是一个将Datatable转换成数组的示例代码:

int[] ids = dt.AsEnumerable().Select(row => row.Field("ID")).ToArray();
string[] names = dt.AsEnumerable().Select(row => row.Field
   ("Name")).ToArray();

   
  

上述代码中,我们首先使用AsEnumerable()方法将Datatable转换成可枚举的序列,然后使用Select()方法和Lambda表达式来选择列数据。最后,使用ToArray()方法将所选列数据转换成数组。

七、List转Datatable

将List对象转换成Datatable可以使用System.Data.DataTableExtensions类。下面是一个将List转换成Datatable的示例代码:

List<Person> list = new List<Person>();
list.Add(new Person { ID = 1, Name = "Alice" });
list.Add(new Person { ID = 2, Name = "Bob" });

DataTable dt = new DataTable();
dt.Columns.Add("ID", typeof(int));
dt.Columns.Add("Name", typeof(string));

foreach (var item in list)
{
    DataRow row = dt.NewRow();
    row["ID"] = item.ID;
    row["Name"] = item.Name;
    dt.Rows.Add(row);
}

上述代码中,我们首先创建了一个Person类,并将其添加到List对象中。然后使用DataTableExtensions类创建了一个Datatable对象,并添加两个列。最后,使用foreach循环将List中的数据添加到Datatable对象中。

八、Dataframe转List

在Python中,Pandas库的Dataframe对象是非常常用的数据结构之一。我们可以使用pd.read_sql()方法从数据库中读取数据,并将其转换成Dataframe对象。下面是一个将Dataframe转换成List的示例代码:

import pandas as pd

df = pd.read_sql('select * from MyTable', conn)
data_list = df.to_dict(orient='records')

上述代码中,我们使用pd.read_sql()方法从数据库中读取数据,并将其转换成Dataframe对象。然后使用to_dict()方法将Dataframe转换成字典类型,并通过将orient参数设置为'records'将字典转换成List类型。

九、Datatable转Dictionary

将Datatable转换成Dictionary可以使用System.Linq和System.Collections.Generic命名空间下的Dictionary类。下面是一个将Datatable转换成Dictionary的示例代码:

Dictionary<int, string> dict = dt.AsEnumerable().ToDictionary(row => row.Field<int>("ID"), row => row.Field<string>("Name"));

上述代码中,我们首先使用AsEnumerable()方法将Datatable转换成可枚举的序列,然后使用ToDictionary()方法和Lambda表达式来选择列数据。最后,指定keySelector选项为"ID"列的整数值,将其作为字典的键,指定elementSelector选项为"Name"列的字符串值,将其作为字典的值。