【问题标题】:Parse JSON string using C# script in SSIS在 SSIS 中使用 C# 脚本解析 JSON 字符串
【发布时间】:2015-11-29 20:33:25
【问题描述】:

我正在使用 SSIS 中的 C# 脚本任务从 CurrencyLayer 检索 USD -> GBP 汇率。我使用了以下代码:

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
   }
}

但是,我目前不确定如何仅检索与“USDGBP”汇率对应的 0.66527 值并将其传递给变量。我看到了许多使用 JSON.net 库的建议,但我无法向该项目添加任何第三方库。任何帮助将不胜感激。

【问题讨论】:

  • 您可以保持简单,只需使用字符串解析即可将其取出。当您的包主要是 C# 代码时,您可能需要重新考虑它是否应该是一个包。

标签: c# json ssis


【解决方案1】:

您可以使用System.Json Namespace 中的JsonValue 类。

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

或者你可以使用System.Web.Script.Serialization中的JavaScriptSerializer

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

或在Json.Decode 中来自System.Web.Helpers

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

【讨论】:

  • 我找不到 System.Json 命名空间或 System.Web.Script.Serialization 是否有机会记住您添加的引用?
【解决方案2】:

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

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

【讨论】:

  • 我无法添加任何第三方库,所以无法使用 JSON.NET
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-15
    • 2018-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多