.NET

2010-05-10 26 views
9

içinde gerçekten basit JSON serileştirme JSON'a serileştirmek ve tekrar yedeklemek için bazı basit .NET nesneleri kullanıyorum. Serileştirilecek nesne kümesi oldukça küçüktür ve uygulamayı kontrol ederim, bu yüzden her şey için çalışacak genel bir çözüme ihtiyacım yok. Derlememiz bir kütüphane olarak dağıtılacağından, bazı üçüncü taraf DLL'lere bağımlı kalmaktan kaçınmak istiyorum: Kullanıcılara yalnızca referans verebilecekleri bir montaj vermek istiyorum..NET

.NET'te JSON'a dönüştürebildiğim diğer soruları okudum. JSON.NET'in önerilen çözümü elbette işe yaramıyor, ancak ekstra bir DLL dağıtımı gerektiriyor.

JSON.NET'in fantezi özelliklerinden hiçbirine ihtiyacım yok. Sadece dizeleri, tam sayıları, DateTimes ve dizeleri ve bayt dizilerini içeren basit bir nesneyi (hatta sözlük) kullanmam gerekiyor. Deserializing üzerinde bir sözlük geri almaktan mutluyum - nesneyi tekrar oluşturmaya gerek yok.

Bu basit işi yapmak için derlememi derleyebildiğim gerçekten basit bir kod var mı?

Ayrıca, System.Web.Script.Serialization.JavaScriptSerializer'u denedim, ancak aşağıya düştüğü yerde bayt dizisi var: base64'i kodlamak istiyorum ve hatta bir dönüştürücü kaydettirmek, API işleyiş biçimi nedeniyle bunu kolayca başaramama izin vermiyor (alan adından geçmez).

+1

sen [ILMerge] kullanarak düşündünüz mü (http://research.microsoft.com/en-us/people/mbarnett/ilmerge.aspx) JSON.NET'i meclise yerleştirmek için mi? –

+0

Hayır, ama bana gösterdiğiniz için teşekkür ederim. Bunun için çok fazla olabilir diye düşünüyorum, ama çok ilginç bir araç gibi görünüyor ve üzerinde çalıştığım başka bir şey için kullanmayı düşüneceğim. +1 – EMP

+1

JSON verisi dize içeriyorsa muhtemelen sizin yerinizde kullanmak yerine JSON.NET gibi bir paket kullanmanız yeterlidir. Örneğin, dizelerinizdeki boşlukları nasıl kullanırsınız? Veya dizgede tek/çift tırnak mı? Yeni satırların? –

cevap

4

Json.NET MIT lisanslı, yalnızca kaynağı karşıdan yükleyebilir ve yalnızca uygulamanız için gereken dosyaları ekleyebilirsiniz.

+0

'System.Web.Script.Serialization.JavaScriptSerializer' içinde bu soruna geçici bir çözüm buldum, ancak bunu kabul ediyorum çünkü muhtemelen başka türlü yapacağım. – EMP

+0

@Evgeny - Bayt dizisini kodlamada bu sorunu çözmek için neler yapabileceğiniz hakkında biraz bilgi verebilir misiniz? Bende aynı problem var ve eğer mümkünse – InSane

+0

@ InSane gibi maalesef JSON.net gibi bir 3. parti kütüphanesi kullanmaktan kaçınmayı tercih ederim. Bu aşamada maalesef hatırlamıyorum ve artık bu koda erişemiyorum. Dizinin kendimi nesnenin içinde kendime kodlayan 64'üm veya alt alanlı bir dönüştürücü kullanarak bitebilirim - daha önce gönderdiğim yanıtı görün. – EMP

4

böyle, baz-64 alt alana bayt dizileri kodlayan bir dönüştürücü kayıt .NET framework JavaScriptSerializer kullanılarak sağlayan bir olası geçici çözüm:

class ByteArrayBase64Converter : JavaScriptConverter 
{ 
    public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer) 
    { 
     return Convert.FromBase64String((string)dictionary["b64"]); 
    } 

    public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer) 
    { 
     return new Dictionary<string, object> { { "b64", Convert.ToBase64String((byte[])obj) } }; 
    } 

    public override IEnumerable<Type> SupportedTypes 
    { 
     get { return new[] { typeof(byte[])}; } 
    } 
} 


var serializer = new JavaScriptSerializer(); 
serializer.RegisterConverters(new JavaScriptConverter[] { new ByteArrayBase64Converter() });