Я делаю приложение, которое использует API Reddit для получения сообщений из субреддитов.
но каждый раз, когда я получал JSON, вместо "
Я попробовал три разных метода для загрузки JSON с веб-сайта Reddit, но каждый раз, когда он заполняется \", и мой десериализатор не может справиться с этим.
var json = get_json("https://www.reddit.com/r/" + "memes" + "/new.json?sort=new&limit=1");
string webData = json.Replace('\"', '"');
MessageBox.Show(webData, "");
NormalInput normal = JsonConvert.DeserializeObject<NormalInput>(webData);
public string get_json(string url)
{
Uri uri = new Uri(url);
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
request.Method = WebRequestMethods.Http.Get;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());
string output = reader.ReadToEnd();
response.Close();
return output;
}
Я ожидаю, что вывод из json.Replace() или get_json() не будет иметь \", но я получаю их везде
Пожалуйста, добавьте скриншот (да, настоящую картинку, а не скопированный текст - я знаю, что их здесь не часто просят :)), чтобы мы могли буквально увидеть, что вы видите, когда говорите «они повсюду».
URL-адрес reddit.com/r/memes/new.json?sort=new&limit=1 не возвращает \", только ", просто нажмите на ссылку, чтобы попробовать и увидеть ее в своем браузере.
да, URL-адрес не имеет \", но мое приложение все равно их получило





Вот полный рабочий пример с использованием динамического и базового WebClient:
using System;
using Newtonsoft.Json;
using System.Net;
public class Program
{
public static void Main()
{
var client = new WebClient();
var url = "https://www.reddit.com/r/" + "memes" + "/new.json?sort=new&limit=1";
var json = client.DownloadString(url);
dynamic output = JsonConvert.DeserializeObject<dynamic>(json);
Console.WriteLine(output.data.children[0].data.title);
}
}
текущий выход:
This meme is not dead!
Чтобы взаимодействовать с Reddit, возможно, вам следует полагаться на клиентскую библиотеку C# Reddit. Проверьте самородок.
Если вы хотите продолжать использовать самодельное решение (для развлечения и обучения), вы можете улучшить этот быстрый ответ, используя HttpClient вместо старого (но простого) WebClient и переключившись с динамического использования JsonConvert.DeserializeObject на реальный класс (я написал ответ для достижения этого. Попробуйте ^^). Если ваш класс NormalInput соответствует json, продолжайте его использовать.
Я вижу, что вы пытаетесь загрузить JSON из URI. Использование NewtonSoft — хороший способ получить json из URI.
Пожалуйста, взгляните на этот пост : https://www.codeproject.com/Tips/397574/Use-Csharp-to-get-JSON-Data-from-the-Web-and-Map-i
JsonConvert.DeserializeObject от NewtonSoft. OP знает о Json.NET :)
Вы уверены, что это не просто представление экранированной строки в отладчике Visual Studio?