gpt4 book ai didi

c# - 将 json 转换为自定义对象数组

转载 作者:行者123 更新时间:2023-11-30 15:05:55 26 4
gpt4 key购买 nike

我正在尝试使用 C# 和 Json.Net 为 Windows Phone 7 创建一个 reddit 应用程序(仅供练习)。我正在尝试将 json 转换为 c# 可以使用的东西,以及其他一些东西。我可以提取我想要的数据,但不知道我是否使用了正确的方法。然后一旦我有了 json 数据,我就无法将其转换为自定义对象。无论如何,我确信这段代码中有很多错误,因此非常感谢任何帮助我理顺方向的帮助。

代码如下:

   public partial class MainPage : PhoneApplicationPage
{
string json = "";
RootObject topic = new RootObject();
public MainPage()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
textBlock1.Text = "Retrieving...";
string url = @"http://www.reddit.com/r/all.json";
HttpWebRequest hWebRequest = (HttpWebRequest)HttpWebRequest.Create(url);
hWebRequest.Method = "GET";
hWebRequest.BeginGetResponse(Response_Completed, hWebRequest);
}
public void Response_Completed(IAsyncResult result)
{
HttpWebRequest request = (HttpWebRequest)result.AsyncState;
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(result);
using (StreamReader streamReader = new StreamReader(response.GetResponseStream()))
{
json = streamReader.ReadToEnd();
topic = JsonConvert.DeserializeObject<RootObject>(json);

}
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
//textBlock2.Text = topic.data2.title;
textBlock1.Text = "Done.";
});

这一行告诉我需要一个"new"调用。

textBlock2.Text = topic.data2.title;

现在这部分给我带来了麻烦。如何正确实例化 data、data2 和 child?

     public class MediaEmbed
{
}

public class Data2
{
public string domain { get; set; }
public MediaEmbed media_embed { get; set; }
public object levenshtein { get; set; }
public string subreddit { get; set; }
public string selftext_html { get; set; }
public string selftext { get; set; }
public object likes { get; set; }
public bool saved { get; set; }
public string id { get; set; }
public bool clicked { get; set; }
public string title { get; set; }
public object media { get; set; }
public int score { get; set; }
public bool over_18 { get; set; }
public bool hidden { get; set; }
public string thumbnail { get; set; }
public string subreddit_id { get; set; }
public string author_flair_css_class { get; set; }
public int downs { get; set; }
public bool is_self { get; set; }
public string permalink { get; set; }
public string name { get; set; }
public double created { get; set; }
public string url { get; set; }
public string author_flair_text { get; set; }
public string author { get; set; }
public double created_utc { get; set; }
public int num_comments { get; set; }
public int ups { get; set; }
//public override string ToString()
//{
// return title;
//}
}

public class Child
{
public string kind { get; set; }
public Data2 data { get; set; }
}

public class Data
{
public string modhash { get; set; }
public Child[] children { get; set; }
public string after { get; set; }
public object before { get; set; }
}

public class RootObject
{
public RootObject()
{
}
public string kind { get; set; }
public Data data = new Data();
public Data2 data2 = new Data2();
public Child child = new Child();
}
}

最佳答案

我发现您的产品存在一些问题。第一个是你必须将 json 数据反序列化到的类的结构。为此手动编写类非常乏味且容易出错,所以我通常喜欢使用 this site插入 json 并取出我需要的类并根据需要重命名。然后我会去找 api docs让数据填补类中数据根本没有的任何空白。

在那之后,你只需要反序列化你现在拥有的根对象类的单个实例,而不是它们的列表,所以像这样:

RootObject topics = JsonConvert.DeserializeObject<RootObject>(json);

另一个注意事项是,当您反序列化数据时,在您的代码中,您当前正在声明一个名为 topics 的新局部变量,它隐藏了您的成员变量,该变量也称为 topics 在那个特定的范围内,所以如果你检查那个成员变量,你会发现它里面没有任何数据。你不想在那里声明一个新变量,你只想使用现有的成员变量,所以你只想做而不是上一行:

topics = JsonConvert.DeserializeObject<RootObject>(json);

如果您想真正明确和清楚该变量的来源,甚至可以是 this.topics

关于c# - 将 json 转换为自定义对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8542759/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com