2015-11-29 44 views
1

我正在使用SSIS中的C#脚本任务从CurrencyLayer检索USD - > GBP汇率。我用下面的代码:使用SSIS中的C#脚本解析JSON字符串

string url = Dts.Variables["User::CurrencyLayerURL"].Value.ToString(); 
WebClient wc = new WebClient(); 
var jsonString = wc.DownloadString(url); 

要成功检索以下JSON字符串:

{ 
    "success":true, 
    "terms":"https:\/\/currencylayer.com\/terms", 
    "privacy":"https:\/\/currencylayer.com\/privacy", 
    "historical":true, 
    "date":"2015-11-28", 
    "timestamp":1448755199, 
    "source":"USD", 
    "quotes":{ 
     "USDGBP":0.66527 
    } 
} 

但是,我不知道在这一点上如何检索只对应于0.66527值“ USDGBP“汇率并将其传递给一个变量。我看到了一些使用JSON.net库的建议,但我无法将任何第三方库添加到此项目中。任何帮助,将不胜感激。

+0

你可以保持简单,只需使用字符串解析就可以了。当你的包主要是C#代码时,你可能想重新考虑它是否应该是一个包。 –

回答

2

可以使用JsonValue类从System.Json Namespace

JsonValue value = JsonValue.Parse(jsonString); 
var quote = (string)result["quotes"]["USDGBP"]; 

或者你可以使用JavaScriptSerializerSystem.Web.Script.Serialization

var serializer = new JavaScriptSerializer(); 
var result = serializer.Deserialize<ExpandoObject>(jsonString); 
var quote = result.quotes.USDGBP; 

或者在Json.DecodeSystem.Web.Helpers

Var result = Json.Decode(jsonString); 
var quote = result.quotes.USDGBP; 
+0

我无法找到System.Json命名空间或System.Web.Script.Serialization任何机会,你可以记住你添加的引用吗? – DaImTo

0

使用JSON.NET解析您的JSON对象:

dynamic d = JObject.Parse(jsonString); 
Console.WriteLine(d.quotes.USDGBP); 
+0

我不能添加任何第三方库,所以我不能够使用JSON.NET – EvanMPW

0

你可以使用JavaScriptSerializer您可以添加Syatem.Web.Extensions命名空间引用。

var serializer = new JavaScriptSerializer(); 
    //Serialize 
    var serializedResult = serializer.Serialize(Object); 
    //Deserialize 
    var deserializedResult = serializer.Deserialize<OutputObjectType>(jsonString);