6

FIX メッセージ (XML とは異なります) 用のカスタム .NET シリアライザー/デシリアライザーを作成したいと考えています。基本的に、メッセージは次のようにコーディングされます<tag>=<value>;<tag>=<value>;...

したがって、サンプルは次のようになります。

51=2;20=hello;31=2

XMLSerializer クラスを使用してメッセージをシリアライズ/デシリアライズできるのと同じように、FIX Serializer クラスを使用したいと考えています。次のような FIX メッセージ クラスを作成することを想像します。

[Serializable]
public class FixMessage
{ 
     [FIXValuePair(51)]
     public double Price { get; set; }

     [FIXValuePair(20)]
     public string SomethingElse { get; set; }
}

そのようなシリアライザー/デシリアライザーをどのように書くかについての指針はありますか?

4

1 に答える 1

6

リフレクションを使用すると、シリアル化するオブジェクトのプロパティをループして、プロパティごとに属性を確認できます (再びリフレクションを使用)。最後に、出力をストリームに送信します。

コードは次のようになります (簡略化)。

public string Serialize(object o)
{
    string result = ""; // TODO: use string builder

    Type type = o.GeyType();

    foreach (var pi in type.GetProperties())
    {
        string name = pi.Name;
        string value = pi.GetValue(o, null).ToString();

        object[] attrs = pi.GetCustomAttributes(true);
        foreach (var attr in attrs)
        {
           var vp = attr as FIXValuePairAttribute;
           if (vp != null) name = vp.Name;
        }

        result += name + "=" + value + ";";
    }

    return result;
}
于 2013-01-23T21:36:24.467 に答える