Search code examples
c#jsonjson.net

Detect end of json object using Newtonsoft.Json


I have a string that starts with a JSON object but after the end of which the string goes on (something like {"a":"fdfsd","b":5}ghresd). The text afterward can contain any character and the JSON can be anything allowed for a JSON.

I would like to deserialize the JSON object and know where it ends because I want to process the rest of the string afterward, how do I do that, preferably using Newtonsoft.Json?


Solution

  • You could make use of the SupportMultipleContent property, for example:

    var json = "{\"a\":\"fdfsd\",\"b\":5}ghresd";
    
    var reader = new JsonTextReader(new StringReader(json));
    reader.SupportMultipleContent = true;
    
    //Read the first JSON fragment
    reader.Read();
    
    var serializer = new JsonSerializer();
    var result = serializer.Deserialize(reader);
    
    //Or if you have a class to deserialise into:
    //var result = serializer.Deserialize<YourClassHere>(reader);
    
    //Line position is where the reader got up to in the JSON string
    var extraData = json.Substring(reader.LinePosition);