如何用\“修复JSON?

时间:2019-07-29 09:11:52

标签: c# json api

我正在制作一个使用Reddit的API从子Reddit获取帖子的应用

但是每次我得到的JSON都有\“而不是”

我尝试了三种不同的方法从Reddit的网站下载JSON,但是每次使用\“填充时,我的反序列化器都无法处理

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()的输出没有任何\“,但是我到处都可以找到它们

2 个答案:

答案 0 :(得分:4)

这是一个使用动态和基本WebClient的完整工作示例:

Try it online

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客户端库。选中nuget

如果您想继续使用自制解决方案(以获取乐趣和学习),可以使用HttpClient代替旧的(但简单的)WebClient来改善此快速解答,并从JsonConvert.DeserializeObject在实际类中的动态用法(我写了answer to achieve that。尝试一下^^)。如果您的类NormalInput与json匹配,请继续使用它。

答案 1 :(得分:0)

我看到您尝试从URI下载JSON。使用NewtonSoft是从URI获取json的好方法。

请看一下这篇文章:https://www.codeproject.com/Tips/397574/Use-Csharp-to-get-JSON-Data-from-the-Web-and-Map-i