gpt4 book ai didi

c# - 如何在不知道结构的情况下在 C# 中反序列化 JSON 对象

转载 作者:行者123 更新时间:2023-12-03 08:07:58 24 4
gpt4 key购买 nike

是否可以在 C# 中获取我从其他源读取的 JSON 对象并将内容转换为文件。问题是我不知道传入对象的结构。

到目前为止我已经得到了这个:

 var response = await client.GetAsync("https://blahblah/creds" +
"?ApiKey=" + textBox_password.Text +
"&deviceId=" + deviceId +
"&modelNum=" + modelNum);

var res = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
var resJson = JsonConvert.DeserializeObject(res);
this.textBox_Stream.AppendText("responseBody = " + resJson + "\r\n");

这给了我:

responseBody = {
"statusCode": 200,
"body": {
"modelNum": "42",
"creds": "[{\"deviceid.txt\":\"4DA23E\",\"pac.txt\":\"580795498743\"}]",
"deviceId": "4DA23E"
}
}

我想要做的是创建一个名为 4DA23E 的文件夹,并在其中为 creds 对象中的每个条目放置一个文件。

device.txt 将包含 4DA23Epac.tct 将包含 580795498743

等等。我无法找到一种动态的方式来提取我需要的东西。不用说,我不是 C# 程序员!所以,请善待。

最佳答案

不要使用JsonConvert.DeserializeObject。当您知道 JSON 对象的架构并且创建了相应的 C# 模型时,效果最好。

首先,解析外部响应 JSON

var res = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
JObject resJson = JObject.Parse(res);

现在提取“creds”属性的值并重新解析它。

var credsJsonRaw = resJson["body"]["creds"].Value<string>();
JArray credsJson = JArray.Parse(credsJsonRaw);

现在您可以循环遍历数组中的每个对象以及每个对象中的每个属性。

foreach (JObject obj in credsJson)
{
foreach (JProperty prop in obj.Properties)
{
Console.WriteLine($"Name = {prop.Name}");
Console.WriteLine($"Value = {prop.Value.Value<string>()}");
}
}

对于您的示例,这会打印

Name = deviceid.txtValue = 4DA23EName = pac.txtValue = 580795498743

关于c# - 如何在不知道结构的情况下在 C# 中反序列化 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71595873/

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