Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有一种更优雅(代码更少)的方式将JSON导入数据表(C#)_C#_Json_Rest_Etl - Fatal编程技术网

有没有一种更优雅(代码更少)的方式将JSON导入数据表(C#)

有没有一种更优雅(代码更少)的方式将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

最近,我完成了一个项目,用Salesforce、GitHub、ReviewBoard、Jenkins等数据源进行提取转换和加载。换句话说,就是一堆REST/JSON接口。对类进行反序列化的经典方法看起来既耗时,又会创建庞大的代码库,等等。所以我花了一点时间寻找替代方法

下面是我想到的--几行代码中的Rest调用.Net数据集。从.Net数据集移动到数据集市或数据仓库的工作量很小

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所期望的格式?