2013-01-23 14 views
6

FIX iletileri için (XML gibi olmayan) bir özel .NET serializer/deserializer yazmak istiyorum. Temelde mesajı <tag>=<value>;<tag>=<value>;...Özel bir POCO serializer/deserializer nasıl yazılır?

olarak kodlanmıştır Yani örnek biri olabilir:

51=2;20=hello;31=2 
Ben serialize edebilmek için ben XMLSerializer sınıfı kullanmak benzer şekilde benim FIX seri hale sınıfını kullanmak istiyorum

/serisi kaldırılmaya mesajlar. Böyle bir seri hale/Deserializer yazardı nasıl

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

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

Herhangi işaretçiler: Ben böyle bir Düzeltme mesaj sınıfını yazardı hayal olur?

+1

bak: (ServiceStack itibaren) JSV, Json.NET, Protobuf.NET vb varolan kodun Bol/dokümantasyon. Ayrıca, seri hale getirme hızını arttırmak veya özelleştirme noktalarına izin vermek için sık sık uygulanan [basit] numaralar da vardır. –

+1

@pst, bunu bir yanıt olarak eklemelisiniz. Bu yardımcı oldu! – Denis

+0

İşinize yaradığıma memnun oldum - keşiflerinizi/potansiyelinizi/yaklaşımınızı/sonucunuzu detaylandırmaktan çekinmeyin :) –

cevap

6

Yansımayı kullanarak, serileştirdiğiniz nesnenin özelliklerini döngüleyebilirsiniz, ardından her özellik için öznitelikleri kontrol edebilirsiniz (yansıma kullanarak). Ve sonunda çıktınızı bir akışa gönderirsiniz.

böyle bir şey (basitleştirilmiş) görünebilir Kodunuz: Mevcut açık kaynak projeleri

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; 
} 
+3

Ve bir şeyleri "Serializable" olarak işaretlemek yerine "FixSerializable" adlı yeni bir özellik ekleyebilirsiniz '. Bu, FIX serileştiricinize bağlı olarak nesnelerini seri olarak tanımlamayı kolaylaştırır. –

+0

Ne dediğini görüyorum. Uygulamam gereken bir arayüz var mı? Yazarken başka insanlardan örnekler var mı? - Bulamadım ki herhangi bir tuzaktan kaçınıyorum? – Denis

+0

Eli, iyi haber! – Denis

İlgili konular