有没有一种更优雅(代码更少)的方式将JSON导入数据表(C#)
最近,我完成了一个项目,用Salesforce、GitHub、ReviewBoard、Jenkins等数据源进行提取转换和加载。换句话说,就是一堆REST/JSON接口。对类进行反序列化的经典方法看起来既耗时,又会创建庞大的代码库,等等。所以我花了一点时间寻找替代方法 下面是我想到的--几行代码中的Rest调用.Net数据集。从.Net数据集移动到数据集市或数据仓库的工作量很小有没有一种更优雅(代码更少)的方式将JSON导入数据表(C#),c#,json,rest,etl,C#,Json,Rest,Etl,最近,我完成了一个项目,用Salesforce、GitHub、ReviewBoard、Jenkins等数据源进行提取转换和加载。换句话说,就是一堆REST/JSON接口。对类进行反序列化的经典方法看起来既耗时,又会创建庞大的代码库,等等。所以我花了一点时间寻找替代方法 下面是我想到的--几行代码中的Rest调用.Net数据集。从.Net数据集移动到数据集市或数据仓库的工作量很小 using System; using System.Linq; using System.Data; using S
using System;
using System.Linq;
using System.Data;
using System.Xml;
using Newtonsoft.Json;
namespace Avalara.AvaTax.JsonUtilities
{
public static class Utility
{
public static DataSet GetDataSet(string url, string rootName = "myroot")
{
var webRequest = (HttpWebRequest)WebRequest.Create(url);
webRequest.Method = "GET";
webRequest.ContentType = "application/json, *.*";
webRequest.UserAgent = "Mozilla/5.0 (Windows NT 5.1; rv:28.0) Gecko/20100101 Firefox/28.0";
webRequest.Headers.Add("AUTHORIZATION", Authorization);
var webResponse = (HttpWebResponse)webRequest.GetResponse();
if (webResponse.StatusCode != HttpStatusCode.OK)
Console.WriteLine("{0}", webResponse.Headers);
var json = String.Empty;
using (StreamReader reader = new StreamReader(webResponse.GetResponseStream()))
{
json = reader.ReadToEnd();
reader.Close();
}
// We must name the root element
return ConvertJsonToDataSet(json, rootName);
}
public static DataSet ConvertJsonToDataSet(string jsonText, string rootElementName)
{
var xd1 = new XmlDocument();
xd1 =JsonConvert.DeserializeXmlNode( jsonText,rootElementName);
var result = new DataSet();
result.ReadXml(new XmlNodeReader(xd1));
return result;
}
}
}
有没有一种更优雅的方法来实现从Json到DataSet的ETL?大部分是web请求部分,Json部分已经很小了……如果我想让它更优雅,我会为封装参数的WebRequest(GetResponseJson(url))添加扩展方法。然后是数据集的扩展方法(ReadJsonStream(Stream))。一天结束时,会执行相同的代码,但您的客户端会减少到2-3行代码。这更像是一种问题。Json.NET已经内置了反序列化
数据集的支持,请参阅。您的JSON看起来像什么?它是否符合Json.NET所期望的格式?