Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Deserialize Bytes Array directly to Object in JSON.Net

I am reading a json file which contains large data and deserializing it into object. I am trying to increase the performance by reading the bytes and deserialize it. But when I searched it says I have to convert it to string to deserialize it. Is there any way to deserialize directly without converting into string.

Below is what I have done.

byte[] bytesArray = File.ReadAllBytes(path);
var bytesAsString = Encoding.ASCII.GetString(bytesArray);
object person = JsonConvert.DeserializeObject<List<PersonList>>(bytesAsString);

I want to remove the second line and go directly to the next step, ie, skip converting to string.

using (StreamReader file = File.OpenText(path))
{
    JsonSerializer jsonSerializer = new JsonSerializer
    {
       NullValueHandling = NullValueHandling.Ignore
    };
    object person = (object)jsonSerializer.Deserialize(file, typeof(List<PersonList>));
}

Above code I read the whole file and convert it into object. My aim of reading bytes is to increase the performance of this code.

like image 847
Midhun Mathew Avatar asked Dec 06 '25 16:12

Midhun Mathew


2 Answers

No. There is no way to deserialize your whole object without converting it to string.

The reason is simple: The Json Deserializer has to read the while JSON (text) to be able to tokenize it. So the deserialization can happen.

Edit: What you can do is to read specific parts of your (big) text file and deserialize them. This can increase your performance. BUT: you have to use string here again

Edit2: When you say "large data", do you mean much required data or just a huge amount of bytes? Maby your class has many data that are not required (like private fields, lists that are generated dynamically). You can "remove" them from your json using the JsonIgnore attribute.

like image 55
Radinator Avatar answered Dec 08 '25 08:12

Radinator


You need the string to deserialize... But maybe you can call System.IO.File.ReadAllText() directly... But i dont think this increases the speed very much because also ReadAllText has to encode.

like image 33
Cadburry Avatar answered Dec 08 '25 07:12

Cadburry



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!