3

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.

Midhun Mathew
  • 2,147
  • 8
  • 28
  • 45
  • Have you throught about serialization/deserialization? http://stackoverflow.com/questions/4143421/fastest-way-to-serialize-and-deserialize-net-objects – Alex Pashkin Oct 21 '16 at 07:24

2 Answers2

1

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.

Radinator
  • 1,048
  • 18
  • 58
1

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.

Cadburry
  • 1,844
  • 10
  • 21