2009-08-26 11 views
14

Aklımı google protobuf etrafında yapmaya çalışıyorum. C# içinde protobuf bir uygulama buldum ama bir özellik eksik görünüyor: özniteliklerle süslenmiş mevcut bir C# sınıfından .proto dosyaları otomatik olarak üretme yeteneği.Niteliklerle dekore edilmiş bir C# sınıfından nasıl bir .proto dosyası oluştururum?

Otomatik olarak oluşturulan C# sınıflarından .proto dosyasından çıkmak yerine bu şekilde yapmak istediğim nedeni, zaten projemde tanımlanan C# sınıflarım var ve bunları karşılamak için çoğaltmak istemiyorum. Protobuf.

Böyle bir senaryoyla karşılaştı mı?


Güncelleme

bu sadece Protobuf kullanmak için bir .proto dosyası kullanmak C# sınıfı süslemek değil mümkün mü?

cevap

21

iyi haber; açıkladığınız şey (mevcut C# sınıflarına sahip olmak), protobuf-net'in beklenen kullanım durumudur. Tüm .proto maddeleri ("protogen", VS eklentisi, vs.) hepsi sonradan eklenmiştir. Protobuf-net'in çekirdeği onları bilmiyor ya da önemsemiyor.

protokol arabellekleri, uygulamalar arasında paylaşılan bir DSL (.proto, belirtildiği gibi) tanımlar ve (bazen) kod üretimi için kullanılır. İlk kez protobuf-net'i yazdığımda, kod-jenerasyon yönü benim en büyük kaygım değildi - sadece .NET geliştiricileri genellikle “ilk sözleşme” yerine “ilk uygulama” dan suçlu (kendimi dahil ettim). Sonuç olarak, protobuf-net 'un çalışması içinproto dosyalarına gerek yoktur; atıfta bulunulan bir sınıf, açık bir şekilde serileştirmek/serpiştirmek için yeterlidir. Sadece Serializer.Serialize, .Merge ve .Deserialize (vb.) Kullanın.

Bu; o içermez bazı geliştirilen altında ve bunun için deneysel destek çok:

string proto = Serializer.GetProto<YourType>(); 

Bu tamamlanmasına daha çok, ama basit türleri için çalışabilir. Başarısız olduğu bazı özel durumlarınız varsa, bana bildirin (bir yorum ekleyin veya bir sorunu kaydedin). Ancak; çoğu zaman, .proto ile ilgilenen insanlar .proto ilk yazıp oradan çalışacaklardır.

İşe göre dekore edilmiş tiplere örnekler project home page; WCF öznitelikleri, xml öznitelikleri veya protobuf-net öznitelikleri kullanıp kullanmamanız tamamen size bağlıdır (ikincisi miras ve sayısal düzenler gibi bazı özel serileştirme noktaları üzerinde daha fazla denetim sağlasa da).

+0

Harika, bu benim gereksinimlerime o zaman uygun olurdu. Bununla birlikte, bir şey daha, Protobuf-Net Protobuf'un tüm özelliklerini uygular mı? –

+0

Güzel-çok; tel formatı spec, dürüst olmak gerekirse, geniş değildir. Ayrı bir propro uygulamasıyla ortak çalışmak mı istiyorsunuz? İyi çalışmalı, ama * bir .proto (diğer uç için) varsa, bir DTO (.proto'dan) oluşturmanızı ve türünüzden şemasını yapmanızı tavsiye ederim. Aynı zamanda yaratıcı olur ve protobuf-net'in kalıtımı desteklemesine izin verir (** 'nin bir kısmı değil .proto spekülasyonu), ancak diğer istemcilerle tam etkileşime izin veren bir şekilde yapılır. –

+0

Başka bir uygulama ile birlikte çalışmak istemiyorum. Protobuf-ağı, iki uygulama arasında bütün bir nesne hiyerarşisini serileştirmek/serpmek için verimli bir mekanizma olarak kullanacağım. –

4

Skeet Marc burada çalışır ve kitlesel up gelmeden önce, bana protobuf.net. işaret izin

+3

Aslında, bu bana ait; -p –

+0

Evet, projeye baktım ama dekore edilmiş bir C# sınıfından .proto dosyaları nasıl üretileceğiyle ilgili belgeler bulamıyorum. Ya da protobuf'u kullanmak için bir propro dosyası olması gerekiyor mu? –

+0

Eh, sadece Skeet hakkında konuşurken hatırlıyorum .... – Will

İlgili konular