JavascriptSerializer MaxLength Değerinin Aşılması

1 Haz

.Net Framework üzerinde veri transfer mekanizmalarını oluştururken attığımız adımlardan biri de serileştirme işlemidir. Serileştirme işlemlerini Binary, XML veya JSON formatlarında yapabilmekteyiz. Bu yazıda, JSON serileştirme işlemini gerçekleştirirken karşılaşılan bir sorun olan varsayılan olarak ayarlanmış maksimum JSON serileştirme değerinin aşıldığı durumlarda alınan hataları bir ölçüde bertaraf etmeyi inceleyeceğiz.

Örnek uygulamaya geçmeden önce .Net Framework ortamında JSON formatında serileştirme işlemi için gerekli olan ekipmanlardan bahsedelim. Bir nesnenin JSON formatında serileştirilmesi(serialization) veya JSON formatındaki bir verinin .Net nesnesine dönüştürülmesi(deserialization) işlemi için kullanılan referens “System.Web.Extensions”. Projemize bu referansı ekledikten sonra artık ihtiyaç duyduğumuz JavascriptSerializer sınıfına ulaşabiliriz.

Örnek uygulamamızda, verinin büyük olmasını amaçladığımız için bir dosyayı okuyarak JSON formatına dönüştüreceğiz.

Dosya okuma işlemi için aşağıdaki gibi basit bir metod oluşturuyoruz.

private static string readFile()
{
     const string targetDataFile = @"D:\data.txt";

     StreamReader reader = new StreamReader(targetDataFile);

     var result = reader.ReadToEnd();

     return result;
}

Bu metoddan elde ettiğimiz veriyi ise JSON dönüşümünü yapmak için bir başka metod içerisinde kullanıyoruz.

private static string getSerializedFile()
{
    var data = readFile();

    var serializer = new JavaScriptSerializer { MaxJsonLength = int.MaxValue };

    var serialized = serializer.Serialize(data);

    return serialized;
}

Serileştirme işlemi JavascriptSerializer sınıfının Serialize() metodu yardımıyla gerçekleştirilmektedir. JavascriptSerializer sınıfı, MaxJsonLength adında bir property barındırmaktadır. Aksi belirtilmediği taktirde bu property değeri 4MB veriye karşılık gelecek şekilde 2097152 olarak alınır. 4MB’tan fazla veriler için serileştirme sırasında hata verecektir. Bu property için buradan bilgi alabilirsiniz.

Hata InvalidOperationException başlıkı olup, içeriği şu şekildedir: Error during serialization or deserialization using the JSON JavaScriptSerializer. The length of the string exceeds the value set on the maxJsonLength property.

Örnek uygulamamızda MaxJsonLength property değerini int.MaxValue olarak belirledik. Bu da yaklaşık 2GB civarı bir büyüklüktür.