使用C#中的.NET 3.5将数据集转换为JSON

时间:2008-12-10 12:00:00

标签: c# .net json dataset .net-3.5

我一直在寻找一种简单的方法将数据集从PostgreSQL数据库转换为JSON,以便在我正在构建的项目中使用。

这是我第一次使用JSON,我发现找到一种简单的方法很难找到。我一直在使用StringBuilder从数据集中的信息创建一个JSON字符串,但我听说使用System.Runtime.Serialization命名空间.NET 3.5可以非常简单地执行此操作,虽然我还没有找到一篇关于如何做到的简单文章或博客!最简单的方法是什么?

5 个答案:

答案 0 :(得分:6)

使用Newtonsofts Json.Net并查看 DataTable JSON Serialization in JSON.NET and JavaScriptSerializer ,用于创建DataSet-to-JSON转换器。

答案 1 :(得分:4)

对于其他人来说:

以下是将数据集转换为JSON数组的最简单方法,json_encodePHP)与ASP.Net相关:

using Newtonsoft.Json;

public static string ds2json(DataSet ds) {
    return JsonConvert.SerializeObject(ds, Formatting.Indented);
}

答案 2 :(得分:0)

也许您已经在新宣布的system.runtime.serialization.json中听说过.NET Framework 4.0命名空间。

答案 3 :(得分:0)

public static string GetJSONString(DataTable Dt)
{
    string[] StrDc = new string[Dt.Columns.Count];
    string HeadStr = string.Empty;

    for (int i = 0; i < Dt.Columns.Count; i++)
    {
        StrDc[i] = Dt.Columns[i].Caption;
        HeadStr += "\"" + StrDc[i] + "\" : \"" + StrDc[i] + i.ToString() + "¾" + "\",";
    }

    HeadStr = HeadStr.Substring(0, HeadStr.Length - 1);

    StringBuilder Sb = new StringBuilder();
    Sb.Append("{\"" + Dt.TableName + "\" : [");

    for (int i = 0; i < Dt.Rows.Count; i++)
    {
        string TempStr = HeadStr;
        Sb.Append("{");

        for (int j = 0; j < Dt.Columns.Count; j++)
        {
            TempStr = TempStr.Replace(Dt.Columns[j] + j.ToString() + "¾", Dt.Rows[i][j].ToString());
        }
        Sb.Append(TempStr + "},");
    }

    Sb = new StringBuilder(Sb.ToString().Substring(0, Sb.ToString().Length - 1));
    Sb.Append("]}");

    return Sb.ToString();
}

答案 4 :(得分:-2)

public static T WriteJson<T>(this System.Data.DataSet dataSet)
{
    try
    {
        XmlDocument doc = new XmlDocument();
        doc.LoadXml(dataSet.GetXml());
        return (T)Convert.ChangeType(JsonConvert.SerializeXmlNode(doc).Replace("null", "\"\"").Replace("'", "\'"), typeof(T));
    }
    catch (Exception ex)
    {
        throw ex;
    }
}