2015-11-29 50 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);