NewtonSoft json converter " unterminated String, expected delimiter : "; "
<p>I am trying to parse a json response that I get when calling a rest API.
The problem I am facing is that the deserializing doesn't work every time, even though I am making the same request. I don't know how to fix it since a try.catch is not making anything better. </p>

<p>Also, when I am trying to parse a very big response (20+ json objects) the program never works.</p>

<p>I have googled the problem myself but I don't know the solution..</p>

<blockquote>
  <p>Unterminated string. Expected delimiter: ". Path 'drinks[0].strMeasure4', line 3, position 720.</p>
</blockquote>

<p>is one of the errors I am getting, it is never the same.</p>

<pre><code>using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
using ConsoleApplication1;

namespace TCPclient
{
class Program
{
    static void Main(string[] args)
    {

        TcpClient client = new TcpClient();

        client.Connect("www.thecocktaildb.com", 80); // geen http
        string request = getRequestCoctail("margarita");


        NetworkStream stream = client.GetStream();


        byte[] buffer = Encoding.Default.GetBytes(request);

        stream.Write(buffer, 0, buffer.Length);
        StringBuilder message = new StringBuilder();
        int numberOfBytesRead = 0;
        byte[] receiveBuffer = new byte[1024];

        do
        {
            numberOfBytesRead = stream.Read(receiveBuffer, 0, receiveBuffer.Length);

            message.AppendFormat("{0}", Encoding.ASCII.GetString(receiveBuffer, 0, numberOfBytesRead));

        } while (stream.DataAvailable);


        string response = message.ToString();

        //Console.WriteLine("Response: \n" + response);
        response = response.Substring(response.IndexOf("\r\n\r\n"));
        try
        {
            dynamic jsonData = JsonConvert.DeserializeObject(response);
            List&lt;Drink&gt; drankjes = new List&lt;Drink&gt;();

            for (int i = 0; i &lt; jsonData.drinks.Count; i++)
            {

                try
                {
                    string id = jsonData.drinks[i].idDrink;
                    string drink = jsonData.drinks[i].strDrink;
                    string category = jsonData.drinks[i].strCategory;
                    string instructions = jsonData.drinks[i].strInstructions;
                    string glass = jsonData.drinks[i].strGlass;
                    Console.WriteLine(glass);
                    var d = new Drink(id, drink, category, instructions);

                    drankjes.Add(d);
                }
                catch (Exception)
                {
                    Console.WriteLine("error");
                }

            }
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }


        //Console.WriteLine(jsonData.drinks.Count);


        //Console.WriteLine(jsonData.drinks.Count); get ammount of drinks.
        Console.ReadKey();

    }
    //www.thecocktaildb.com/api/json/v1/1/lookup.php?i=15679
    private static string getRequestCoctail(string coctail)
    {

        ///api/json/v1/1/search.php?s=margarita
        return $"GET /api/json/v1/1/search.php?s=godfather HTTP/1.1\r\n"
                 + "Host: www.thecocktaildb.com\r\n\r\n";
    }

    private static string GetMetaDataCocktail(dynamic jsonData)
    {

        dynamic drink = jsonData.drinks[0];
        return $"DrinkID : {drink.idDrink} \nDrinkName : {drink.strDrink} \nInstructions : {drink.strInstructions}";
    }

    private static Drink GenerateNewDrink(dynamic jsonData)
    {
        Console.WriteLine(jsonData.idDrink, jsonData.strDrink, jsonData.strCategory, jsonData.strInstructions);
        return new Drink(jsonData.idDrink, jsonData.strDrink, jsonData.strCategory, "", jsonData.strInstructions);

    }
}
}
</code></pre>

<p>edit :</p>

<p>I added the drink class :</p>

<pre><code>class Drink
{
    public readonly string drinkId;
    public readonly string strDrink;
    public readonly string strCategory;
    public readonly string strInstructions;
    public readonly string strGlass;

    public Drink(string drinkId, string strDrink, string strCategory, string strInstructions)
    {
        this.drinkId = drinkId;
        this.strDrink = strDrink;
        this.strCategory = strCategory;
        this.strInstructions = strInstructions;
    }

    public Drink(string drinkId, string strDrink, string strCategory, string strGlass, string strInstructions)
    {
        this.drinkId = drinkId;
        this.strDrink = strDrink;
        this.strCategory = strCategory;
        this.strGlass = strGlass;
        this.strInstructions = strInstructions;
    }
}
}
</code></pre>

<p>I tried it with :</p>

<p><a href="http://www.thecocktaildb.com/api/json/v1/1/search.php?s=godfather" rel="noreferrer">http://www.thecocktaildb.com/api/json/v1/1/search.php?s=godfather</a></p>

<p>it went good for 5 times, then i got this error + the json i recieved.
the 6th time was fine aswell.</p>

<p><a href="http://pastebin.com/c0d29L0S" rel="noreferrer">http://pastebin.com/c0d29L0S</a> (Better format then the paste below)</p>

<p>Unexpected end when deserializing object. Path 'drinks[1].strIngredient1', line 3, position 1243.</p>

<pre><code>{"drinks":[
{"idDrink":"11423",
"strDrink":"Godfather",
"strCategory":"Ordinary Drink",
"strAlcoholic":"Alcoholic",
"strGlass":"Old-fashioned glass",
"strInstructions":"Pour ingredients into an old-fashioned glass over ice and serve. (Bourbon may be substituted for scotch, if preferred.)",
"strDrinkThumb":null,
"strIngredient1":"Scotch",
"strIngredient2":"Amaretto",
"strIngredient3":"",
"strIngredient4":"",
"strIngredient5":"",
"strIngredient6":"",
"strIngredient7":"",
"strIngredient8":"",
"strIngredient9":"",
"strIngredient10":"",
"strIngredient11":"",
"strIngredient12":"",
"strIngredient13":"",
"strIngredient14":"",
"strIngredient15":"",
"strMeasure1":"1 1\/2 oz ",
"strMeasure2":"3\/4 oz ",
"strMeasure3":" ",
"strMeasure4":" ",
"strMeasure5":" ",
"strMeasure6":" ",
"strMeasure7":" ",
"strMeasure8":"",
"strMeasure9":"",
"strMeasure10":"",
"strMeasure11":"",
"strMeasure12":"",
"strMeasure13":"",
"strMeasure14":"",
"strMeasure15":"",
"dateModified":null
},
{"idDrink":"11538",
"strDrink":"J. R.'s Godfather",
"strCategory":"Ordinary Drink",
"strAlcoholic":"Alcoholic",
"strGlass":"Old-fashioned glass",
"strInstructions":"In an old-fashioned glass almost filled with ice cubes, combine both of the ingredients. Stir to mix the flavors.",
"strDrinkThumb":null,
"strIngredient1":
</code></pre>

<p>I understand why it goes wrong right now, the JSON is invalid ofcourse, but this is the response I recieved. So the code I am using to get the response is wrong.. right?</p>

<p>edit 3:</p>

<p>same request, good JSON response : </p>

<p><a href="http://pastebin.com/e3WNxz0W" rel="noreferrer">http://pastebin.com/e3WNxz0W</a></p>

<p>Now the program works, but it is incosistent.</p>