我正在使用优秀的OpenIso8583Net来发送/接收ISO消息。但是,由于每个组织都有自己的定义和定制,我希望能够尽可能少地触摸项目的源代码来定制格式,以便能够更轻松地升级到新版本。
所以这里有三个我现在面临的自定义:
Bitmap
使用AsciiFormatter
代替BinaryFormatter
?由于位图是AMessage
类的私有字段,即使我直接从AMessage
派生新的自定义类,我也无法访问它。默认情况下,构造函数使用BinaryFormatter
。目前,我已经修改了Bitmap.cs无参数构造函数以使用AsciiFormatter
。 AsciiFormatter
。但我希望它能使用BcdFormatter
。我修改了这部分,默认情况下在VariableLengthFormatter中使用BcdFormatter
如果有人通过扩展而不是修改来向我展示处理这些自定义的更好方法,我将不胜感激。Fields
部分的Generating MAC by encrypting data显示的内容。现在,我必须公开Template
属性并使用以下代码段:
for(var i = 2; i 如何在不公开Template
的情况下访问这些字段?我想访问主程序中的Display
字段方法以进行日志记录。
答案 0 :(得分:4)
我刚刚对项目进行了更改以允许此操作。从版本0.5.0开始(更新您的NuGet包)
您可以在模板中为您的邮件类设置位图格式化程序。以下是一些示例代码:
public class AsciiIsoMsg : Iso8583
{
// First you need to customise the template
// The message
private static readonly Template template;
static AsciiIsoMsg()
{
// Get the default template for the Iso8583 class
template = GetDefaultIso8583Template();
// change the bitmap formatter
template.BitmapFormatter = new AsciiFormatter();
}
// override the base class using the template and you will be using the bitmap formatter
public AsciiIsoMsg():base(template)
{
}
}
在static AsciiIso()
方法中,如果以这种方式修改,您将更改字段2以使用BCD长度格式化程序:
// Set field 2 to use BCD formatter
template[2] = FieldDescriptor.BcdVar(2, 19, Formatters.Bcd);
要在日志文件中显示消息,请在消息类别上使用.ToString()
方法,例如
var msg = new AsciiIsoMsg();
msg.MessageType = Iso8583.MsgType._0200_TRAN_REQ;
msg[3] = "010000";
Console.WriteLine(msg.ToString());
给出了:
0200:
[Fixed n 6 0006] 003 [010000]