在 C# 中解析 Bloomberg API 响应

Parse Bloomberg API response in C#

下午好。 使用 bloomberg api(获取历史数据)时,我得到的响应是这种格式的字符串:

START-OF-FILE
RUNDATE=20220501
# Required headers
FIRMNAME=dl12345
PROGRAMNAME=gethistory
REPLYFILENAME=r20220501030826f95770.bbg

# Scheduling headers
PROGRAMFLAG=daily
TIME=1610

# Runtime options headers
DATERANGE=3
HIST_PERIOD=daily

# Formatting headers
HIST_FORMAT=horizontal
DATEFORMAT=ddmmyyyy
FILETYPE=unix
DISPLAY_PRICING_SRC=no

# Pricing Source headers

# Terminal Identity headers

# Entitlement headers
REGFVHL=YES
REGPRICEUNCERTAINTY=YES
REGTRANSPARENCY=YES

START-OF-FIELDS
PX_BID
PX_ASK
PX_LAST
END-OF-FIELDS

TIMESTARTED=Sun May  1 16:23:55 BST 2022
START-OF-DATA
USDKZT Curncy|0|3|28/04/2022|445.4|446.36|445.89|
USDKZT Curncy|0|3|29/04/2022|441.33|443.63|442.48|
RUBKZT Curncy|0|3|28/04/2022|5.98|6.3062|6.1431|
RUBKZT Curncy|0|3|29/04/2022|5.9895|6.3651|6.1773|
EURKZT Curncy|0|3|28/04/2022|467.8|470.18|468.99|
EURKZT Curncy|0|3|29/04/2022|467.23|469.55|468.39|
CHFKZT Curncy|0|3|28/04/2022|459.5881|460.8167|460.2024|
CHFKZT Curncy|0|3|29/04/2022|453.1108|455.9873|454.5491|
GBPKZT Curncy|0|3|28/04/2022|556.42|558.18|557.3|
GBPKZT Curncy|0|3|29/04/2022|554.85|558.72|556.79|
CNYKZT Curncy|0|3|28/04/2022|67.4989|67.687|67.5929|
CNYKZT Curncy|0|3|29/04/2022|66.908|67.2361|67.0721|
END-OF-DATA
TIMEFINISHED=Sun May  1 16:23:56 BST 2022
#MACRO
END-OF-FILE

所需数据介于 START-OF-DATA 和 END-OF-DATA 之间(这些是特定日期的货币报价),我需要将此数据转换为 json 或 xml . 有什么办法可以规范化这种形式的数据吗,对不起,我对这种文件没有经验。如果有任何帮助,我将不胜感激,谢谢

这是一个老式的 ini,在您的开始点和结束点之间有一些主框架数据。只需在 s.IndexOf("START-OF-DATA")s.IndexOf("END-OF-DATA") 之间获取一个子字符串,然后拆分 string[] arr = mainframeData.Split(Environment.Newline); 然后在 arr 的循环中再次通过管道 item.Split("|"); 拆分并将这些值添加到一个 class,添加到 classes 的列表中,然后将其序列化为 JSON.

伪代码:

string fileContents = new File().ReadAllText("bloomberg.dat");
int st = fileContents.IndexOf("START-OF-DATA");
int end = fileContents.IndexOf("END-OF-DATA")
string data = fileContents.SubString(st + 13, end - 11);

string[] arr = data.Split(Environment.Newline);
List<ClassWithPropertiesForData> currencyList = new ();
foreach(var item in arr)
{
   currencyList.Add(new ClassWithPropertiesForData(item.Split("|")));
}

return Json.Serialize(currencyList);






public class ClassWithPropertiesForData {
  private DateTime day...

// Ctor
public ClassWithPropertiesForData(paramarray...

}