1

我正在使用出色的OpenIso8583Net来发送/接收 ISO 消息。但是,由于每个组织都有自己的定义和自定义,我希望能够自定义格式,尽可能少地接触项目的源代码,以便能够更轻松地升级到新版本。
所以这是我现在面临的三个自定义:

  • 我怎样才能Bitmap使用AsciiFormatter而不是BinaryFormatter?由于位图是AMessage类的私有字段,即使我直接从AMessage. 并且构造函数BinaryFormatter默认使用。目前,我已将 Bitmap.cs 无参数构造函数修改为使用AsciiFormatter.
  • 同样的故事也适用于可变长度格式化程序。它AsciiFormatter默认使用。但我希望它使用BcdFormatter. 我已将此部分修改为BcdFormatter在 VariableLengthFormatter 中默认使用。
    如果有人通过扩展而不是修改向我展示处理这些自定义的更好方法,我将不胜感激。
  • 假设我想在日志文件中显示字段。一个例子是我在通过加密部分中的数据生成 MAC 中显示的Fields内容。现在,我必须Template公开属性并使用以下代码段: for (var i = 2; i

如何在不Template公开的情况下访问这些字段?我想访问Display我的主程序中的字段方法以进行日志记录。

4

1 回答 1

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]
于 2012-02-17T10:40:07.277 回答