残りのAPIを呼び出すときに得られるjsonレスポンスを解析しようとしています 私が直面している問題は、同じリクエストを行っているにもかかわらず、デシリアライズが毎回機能しないということです。 try.catchはもっと良いものを作っていないので、それを修正する方法を知っている。NewtonSoft json converter "未終端の文字列、期待される区切り文字:"; "
また、私は非常に大きな応答(20+ JSONオブジェクト)プログラム働くことはありませんを解析しようとしていたとき。
を私はGoogleで検索しています私自身の問題ですが、解決策はわかりません。
未終了の文字列予想される区切り文字: "。パス '飲み物[0] .strMeasure4'、3行目、位置720。
は、私が得ているエラーの1つです。決して同じではありません。
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<Drink> drankjes = new List<Drink>();
for (int i = 0; i < 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);
}
}
}
編集:
私は飲み物クラスを追加しました:
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;
}
}
}
私はそれを試してみました:それは、5回のために良い行ってきましたし、私が得た
http://www.thecocktaildb.com/api/json/v1/1/search.php?s=godfather
このエラー+ jsonは受信しました。 6回目もうまくいきました。
http://pastebin.com/c0d29L0S(その後ベターフォーマットペースト)
予期端オブジェクトをデシリアライズします。パスは「ドリンク[1] .strIngredient1」、3行目、位置1243
{"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":
それは今うまくいかない理由を私は理解して、JSONはofcourseの無効であるが、これは私が受け取った応答です。だから私は応答を得るために使用しているコードが間違っている..そうですか?
編集3:
同じ要求、良いJSONレスポンス:
今、プログラムが動作しますが、それはincosistentです。
こんにちは@kevin、私は質問にあなたのjson(何か問題がある)を置くことをお勧めします。 jsonの詳細がなければ問題を見つけるのは難しいです。 – Arthas
Drinkクラスを追加することもできます – silver
エラーを受け取ったときにjsonデータをキャプチャしてみてくださいans show – Steve