欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#实现DataTable,List和Json转换的方法

程序员文章站 2022-05-03 16:33:29
本文实例讲述了c#实现datatable,list和json转换的方法。分享给大家供大家参考,具体如下: 1. 将datatable或ilist<>转换成js...

本文实例讲述了c#实现datatable,list和json转换的方法。分享给大家供大家参考,具体如下:

1. 将datatable或ilist<>转换成json格式

using system;
using system.data;
using system.text;
using system.collections.generic;
using system.reflection;
/// <summary>
/// 将datatable或ilist<>转换成json格式
/// </summary>
public class tojson
{
  public tojson()
  {
  }
//datatable转成json
  public static string datatabletojson(string jsonname, datatable dt)
  {
    stringbuilder json = new stringbuilder();
    json.append("{\"" + jsonname + "\":[");
    if (dt.rows.count > 0)
    {
      for (int i = 0; i < dt.rows.count; i++)
      {
        json.append("{");
        for (int j = 0; j < dt.columns.count; j++)
        {
          json.append("\"" + dt.columns[j].columnname.tostring() + "\":\"" + dt.rows[i][j].tostring() + "\"");
          if (j < dt.columns.count - 1)
          {
            json.append(",");
          }
        }
        json.append("}");
        if (i < dt.rows.count - 1)
        {
          json.append(",");
        }
      }
    }
    json.append("]}");
    return json.tostring();
  }
//list转成json
  public static string objecttojson<t>(string jsonname, ilist<t> il)
  {
    stringbuilder json = new stringbuilder();
    json.append("{\"" + jsonname + "\":[");
    if (il.count > 0)
    {
      for (int i = 0; i < il.count; i++)
      {
        t obj = activator.createinstance<t>();
        type type = obj.gettype();
        propertyinfo[] pis = type.getproperties();
        json.append("{");
        for (int j = 0; j < pis.length; j++)
        {
          json.append("\"" + pis[j].name.tostring() + "\":\"" + pis[j].getvalue(il[i], null) + "\"");
          if (j < pis.length - 1)
          {
            json.append(",");
          }
        }
        json.append("}");
        if (i < il.count - 1)
        {
          json.append(",");
        }
      }
    }
    json.append("]}");
    return json.tostring();
  }
}

2. 各种数据集转换为json

/// <summary>
/// 对象转换为json字符串
/// </summary>
/// <param name="jsonobject">对象</param>
/// <returns>json字符串</returns>
public static string tojson(object jsonobject)
{
  string jsonstring = "{";
  propertyinfo[] propertyinfo = jsonobject.gettype().getproperties();
  for (int i = 0; i < propertyinfo.length; i++)
  {
    object objectvalue = propertyinfo[i].getgetmethod().invoke(jsonobject, null);
    string value = string.empty;
    if (objectvalue is datetime || objectvalue is guid || objectvalue is timespan)
    {
      value = "'" + objectvalue.tostring() + "'";
    }
    else if(objectvalue is string)
    {
      value = "'" + tojson(objectvalue.tostring()) + "'";
    }
    else if (objectvalue is ienumerable)
    {
      value = tojson((ienumerable)objectvalue);
    }
    else
    {
      value = tojson(objectvalue.tostring());
    }
    jsonstring += "\"" + tojson(propertyinfo[i].name) + "\":" + value + ",";
  }
  return json.deletelast(jsonstring) + "}";
}
/// <summary>
/// 对象集合转换json
/// </summary>
/// <param name="array">集合对象</param>
/// <returns>json字符串</returns>
public static string tojson(ienumerable array)
{
  string jsonstring = "[";
  foreach (object item in array)
  {
    jsonstring += json.tojson(item) + ",";
  }
  return json.deletelast(jsonstring) + "]";
}
/// <summary>
/// 普通集合转换json
/// </summary>
/// <param name="array">集合对象</param>
/// <returns>json字符串</returns>
public static string toarraystring(ienumerable array)
{
  string jsonstring = "[";
  foreach (object item in array)
  {
    jsonstring = tojson(item.tostring()) + ",";
  }
  return json.deletelast(jsonstring) + "]";
}
/// <summary>
/// 删除结尾字符
/// </summary>
/// <param name="str">需要删除的字符</param>
/// <returns>完成后的字符串</returns>
private static string deletelast(string str)
{
  if (str.length > 1)
  {
    return str.substring(0, str.length - 1);
  }
  return str;
}
/// <summary>
/// datatable转换为json
/// </summary>
/// <param name="table">datatable对象</param>
/// <returns>json字符串</returns>
public static string tojson(datatable table)
{
  string jsonstring = "[";
  datarowcollection drc = table.rows;
  for (int i = 0; i < drc.count; i++)
  {
    jsonstring += "{";
    foreach (datacolumn column in table.columns)
    {
      jsonstring += "\"" + tojson(column.columnname) + "\":";
      if (column.datatype == typeof(datetime) || column.datatype == typeof(string))
      {
        jsonstring += "\"" + tojson(drc[i][column.columnname].tostring()) + "\",";
      }
      else
      {
        jsonstring += tojson(drc[i][column.columnname].tostring()) + ",";
      }
    }
    jsonstring = deletelast(jsonstring) + "},";
  }
  return deletelast(jsonstring) + "]";
}
/// <summary>
/// datareader转换为json
/// </summary>
/// <param name="datareader">datareader对象</param>
/// <returns>json字符串</returns>
public static string tojson(dbdatareader datareader)
{
  string jsonstring = "[";
  while (datareader.read())
  {
    jsonstring += "{";
    for (int i = 0; i < datareader.fieldcount; i++)
    {
      jsonstring += "\"" + tojson(datareader.getname(i)) + "\":";
      if (datareader.getfieldtype(i) == typeof(datetime) || datareader.getfieldtype(i) == typeof(string))
      {
        jsonstring += "\"" + tojson(datareader[i].tostring()) + "\",";
      }
      else
      {
        jsonstring += tojson(datareader[i].tostring()) + ",";
      }
    }
    jsonstring = deletelast(jsonstring) + "}";
  }
  datareader.close();
  return deletelast(jsonstring) + "]";
}
/// <summary>
/// dataset转换为json
/// </summary>
/// <param name="dataset">dataset对象</param>
/// <returns>json字符串</returns>
public static string tojson(dataset dataset)
{
  string jsonstring = "{";
  foreach (datatable table in dataset.tables)
  {
    jsonstring += "\"" + tojson(table.tablename) + "\":" + tojson(table) + ",";
  }
  return jsonstring = deletelast(jsonstring) + "}";
}
/// <summary>
/// string转换为json
/// </summary>
/// <param name="value">string对象</param>
/// <returns>json字符串</returns>
public static string tojson(string value)
{
  if (string.isnullorempty(value))
  {
    return string.empty;
  }
  string temstr;
  temstr = value;
  temstr = temstr.replace("{", "{").replace("}", "}").replace(":", ":").replace(",", ",").replace("[", "【").replace("]", "】").replace(";", ";").replace("\n", "<br/>").replace("\r", "");
  temstr = temstr.replace("\t", "  ");
  temstr = temstr.replace("'", "\'");
  temstr = temstr.replace(@"\", @"\\");
  temstr = temstr.replace("\"", "\"\"");
  return temstr;
}

更多关于c#相关内容感兴趣的读者可查看本站专题:《c#窗体操作技巧汇总》、《c#常见控件用法教程》、《winform控件用法总结》、《c#程序设计之线程使用技巧总结》、《c#操作excel技巧总结》、《c#中xml文件操作技巧汇总》、《c#数据结构与算法教程》、《c#数组操作技巧总结》及《c#面向对象程序设计入门教程

希望本文所述对大家c#程序设计有所帮助。