2010-12-06 23 views
5

Oldukça karmaşık bir nesneler ağına güvenilmeyen bir ortamda serileştirmek ve serileştirmek istiyorum (web tarayıcısı, Unity 3D kullanarak). Düz BinaryFormatter serileştirme gayet iyi çalışıyor, ancak "özel alana erişim" hatalarıyla seri hale getirme çöküyor. Yerel olarak çalışırken mükemmel çalışır.Güvenilmeyen serileştirme stratejisi

Tüm özel alanlarım herkese açık hale getirerek codebase'imi emmemeyi tercih ederim. Bunu yapmadan güvenilmeyen bir ortamda çalışmak için serileştirme elde etmenin en iyi yolu nedir? Ben serileştirme yöntemlerini değiştirmeye açığım, BinaryFormatter başlamak için sadece en kolaydı. Benim özel verileri erişimini seri engellemek istemiyoruz

GÜNCELLEME, ben için serileştirme, Genel yapmak zorunda benim kod encapsulation ödün vermeden benim özel verilere erişmek için izin istiyorum.

Teşekkürler.

+0

Bu bir asp.net uygulaması mı? – TalentTuner

+0

@Saurabh, no. .NET'i çalıştıran bir tarayıcı eklentisi unity3d. – luqui

cevap

0

Diziselleştirmeyle özel alan erişimini önlemek istiyorsanız, belki de Json serileştirme işleminin Xml Serileştirmesi'ne geçmek isteyebilirsiniz.

Özel alanların serileştirilmesini NonSerializaed özniteliklerine yerleştirerek önleyebilirsiniz, ancak geliştiriciler alanlarının geçerli değerler içermesini beklediğinde ve bu alan değerlerinin aktarıldığında kaybolduğunu dikkate almazsanız, sorunla karşılaşabilirsiniz. Birlik eklentisine.

+0

('[NonSerialized]' i ekleyerek) Bu elbette ki bir şeyi gerçekten serileştirmediği anlamına gelir - sizi yanlış anlayamadığım sürece –

+0

Hayır, yanlış anlayamadınız. Bahsettiğim gibi, NonSerialized alanlardaki değerler kaybolur ve düşük seviyeli bir komut modeli gibi bir şeyin kullanıldığı senaryolarda ya da daha olası bir senaryoda Json ya da Xml Serileştirme anahtarına ciddi bir dikkat gerektirir. – Anton

2

Serileştiriciler XmlSerializer ve kamu üyelerine karşı JavaScriptSerializer eser gibi, bu yüzden gerektiği (haçlar parmaklar) güveni açısından kabul edilebilir çalışır. İkili istiyorsanız protobuf-net'i de deneyebilirsiniz - ancak bu senaryoyu agresif bir şekilde test etmemiştim (oldukça seçici bir güven modeline sahip olsa da, Silverlight gibi şeylerde çalışıyor).

BinaryFormatter ile yapıştırmak istiyorsanız, ancak doğrudan alanlarınıza dokunmak istemiyorsanız, ISerializable'u uygulayabilirsiniz, ancak el ile yapmak ... acı verici.

1

Cevapların hiçbiri sorumu yanıtlamadı (açıklama için güncelleme konusuna bakın). BinaryWriter'u kullanarak kendi basit serileştirme formatımı yazmayı bitirdim. Sonunda yaptığımın, sınıflarım için ISerializable arayüzünü manuel olarak uygulamakla eşdeğer olduğunu fark ettim. Grafik serializatoin kodunu manuel olarak uygulamak zorunda kaldım. Zor olmasa da, biraz ince ve benim için zaten yapıldı. Gelecekte bu soruyla birlikte, daha iyi cevaplar yoksa, ISerialzable'u manuel olarak uygulamanızı tavsiye ederim.