扩展/修改OpenIso8583.Net

时间:2012-02-13 19:44:34

标签: customization iso8583 openiso8583.net

我正在使用优秀的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字段方法以进行日志记录。

1 个答案:

答案 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]