如何解析字符串FIXMessage到C#中的FIXMessage对象#
问题描述:
我有字符串FIX消息作为输入,我想将它转换成FIX消息。我正在使用QuickFix 1.13.3(我从quickfix网站下载了几天)如何解析字符串FIXMessage到C#中的FIXMessage对象#
我是QuickFix的新手。 google返回的大部分示例代码/帮助都是针对Java的,并且当应用程序将FIXMessage有效内容视为字符串时,也没有建议使用直接的方式。
我在网上看到的大多数样本都是人们使用QuickFix进行端到端的情况,即通过套接字进行通信以获取消息并破解它。
在我的情况下,我有我自己的通信层,它只是给我一个字符串有效载荷表示一个完整的FIX FIX消息。我需要的只是解析字符串并获取所有标签/值的列表。
尽管我自己写了一个小实用程序来使用标准的string.split()来解析FIX消息......但是有人建议我使用QuickFix,因为它支持所有事情。
但我很努力地开始即使是QuickFix上的一项非常基本的任务,因此任何帮助解析字符串有效载荷将非常感激。
下面是我找的
//转换器或破解
public QuickFix44.Message GetMessage(string payload);
//来电
string newOrderSinglePayload = "8=FIX.4.49=13635=D..............";
QuickFix44:Message message = GetMessage(newOrderSinglePayload);
if (message is QuickFix44.NewOrderSingle)
{
//I am happy
}
如果QuickFix的是太多这个简单的工作,然后我打开使用任何其他工具(免费&开源)
答
QuickFIX是德有限设计为端到端。它的一些类可以用于其他目的,但这些不太常见的用例并没有太多的文档。
您可以将FIX字符串传递给Message
的构造函数。
// Uses default DataDictionary (e.g. message definitions from FIX spec)
Message::Message(const std::string& string, bool validate)
// Uses a DataDictionary that you supply.
// If your msg has custom fields, you need this one.
// (You'll create a DD from a custom msg definition XML file that
// you'll also need to create)
Message::Message(const std::string& string,
const DataDictionary& dataDictionary,
bool validate)
该消息转换为更具体的类型,你可以将其提供给一个更具体的类的构造函数,如ExecutionReport(Message)
。
您是否考虑过QuickFIX/n本机C#端口?
这将和quickfix/N功:
IMessageFactory _defaultMsgFactory = new DefaultMessageFactory();
var dd = new QuickFix.DataDictionary.DataDictionary();
dd.Load("../../../spec/fix/FIX44.xml");
var msg = new QuickFix.FIX44.ExecutionReport();
msg.FromString(msg_string, false, dd, dd, _defaultMsgFactory);
如果你的XML有沉重的自定义,你可能会想再生源和第一重建库。
在他们的.NET API,ExecutionReport构造函数中,或者事实上任何代表特定类型(即NOS)的构造函数都不会将消息类型作为输入。它的签名是ExecutionReport(string orderId,string,int ........),就像当某人有所有输入时创建ER一样 – Ishwar 2013-05-13 08:59:19
Ugh。对不起,我不太了解包装API。它在某些方面与C++有所不同,令人沮丧。您是否尝试过[QuickFIX/n](http://quickfixn.org),本地C#端口? – 2013-05-13 14:38:24
我添加了如何在QuickFIX/n中完成它。 – 2013-05-13 14:42:09