【问题标题】:Converting a dataset to JSON using .NET 3.5 in C#在 C# 中使用 .NET 3.5 将数据集转换为 JSON
【发布时间】:2010-09-26 05:32:36
【问题描述】:

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

这是我第一次使用 JSON,我发现要找到一种简单的方法真的很棘手。目前我一直在使用 StringBuilder 从数据集中的信息创建 JSON 字符串,但我听说可以使用 .NET 3.5 使用 System.Runtime.Serialization 命名空间非常简单地做到这一点,尽管我还没有查找有关如何完成此操作的简单文章或博客!最简单的方法是什么?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      对于关注此主题的其他人:

      这是将数据集转换为 JSON 数组的最简单方法,就像 json_encode (PHP) 对 ASP.Net 所做的那样:

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

      【讨论】:

        【解决方案3】:
        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();
        }
        

        var JObject = eval('(' + JSONString + ');');
        for(var i = 0; i < JObject .Employees.length; i++)
        {
        
        var val1 = JObject.Employees[i].EmployeeID;
        
        var val2 = JObject.Employees[i].NationalIDNumber;
        
        var val3 = JObject.Employees[i].Title;
        
        var val4 = JObject.Employees[i].BirthDate;
        
        var val5 = JObject .Employees[i].HireDate ;
        
        }
        

        【讨论】:

          【解决方案4】:

          您可能听说过新发布的.NET Framework 4.0 中的system.runtime.serialization.json 命名空间。

          【讨论】:

          • 我尝试使用 serialization.json 命名空间,但无济于事......似乎有很多关于如何使用它的示例,并且 JavaScriptSerializer 和 DataContractJsonSerializer 正在输出 XML
          【解决方案5】:
          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;
              }
          }
          

          【讨论】:

          • 欢迎来到 StackOverflow。虽然这段代码可以解决问题,including an explanation 解决问题的方式和原因确实有助于提高帖子的质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人。请edit您的回答添加解释并说明适用的限制和假设。
          猜你喜欢
          • 2016-02-26
          • 1970-01-01
          • 1970-01-01
          • 2016-07-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-06-28
          相关资源
          最近更新 更多