【问题标题】:How to "pass" a variable value to a JSON dynamic object?如何将变量值“传递”给 JSON 动态对象?
【发布时间】:2021-11-29 04:03:24
【问题描述】:

我不知道如何正确地说,这就是我写“通过”的原因(请纠正我)。 我想做的是根据另一个变量值从 JSON 对象中检索一个值

这是代码

WebClient client = new WebClient();
string list = client.DownloadString("https://linkto.json");
dynamic json = JsonConvert.DeserializeObject(list);
var2 = json.variable[0].image;

它需要读取它说“变量”的变量值,但我不确定这是否可能或是否以其他方式完成

另一个编辑:代码上的“变量”是应该读取变量的位置,我不知道如何让它读取值或任何东西

我尝试在这个论坛和互联网上搜索,但我不确定要搜索什么或我应该使用什么

提前感谢您的任何回答!

编辑:

这是 JSON 字符串

{
  "Person1": [
    {
    "image": "http://linktoimage.com",
    "icon": "http://linktoicon.com",
    "background": ""
    }
  ],
  "Person2": [
    {
    "image": "https://linktoimage",
    "icon": "",
    "background": "no-background"
    }
  ]
}

JSON 字符串的简短示例

另一个编辑:JSON 字符串可以随时间变化,带有新的数组

【问题讨论】:

  • 您的意思是您知道您的 json 对象将有一个名为“变量”的数组属性,并且您想获取其第一个元素的图像属性?您能否提供详细信息(您的 json 对象的一部分在此处复制以使这一点更清楚)?
  • 你试过json[0].image吗?不知道json字符串很难分辨
  • @Gigs 我会用 json 字符串编辑问题
  • @Gigs 是的,这就是我的意思
  • @MrCoolAndroid 您是否希望能够指定“Person1”或“Person2”在运行时被拉取?这是你需要的吗?

标签: c# json .net


【解决方案1】:

使用数据的最佳方式是反序列化你下载的json

string json = client.DownloadString("https://linkto.json");
var jsonDeserialized= JsonSerializer.Deserialize<Dictionary<string, List<PersonImage>> >(json).ToList();
List<Person> persons = jsonDeserialized.Select(j => new Person { Name = j.Key, Images = j.Value }).ToList();

杰森格式的人

[
  {
    "Name": "Person1",
    "Images": [
      {
        "image": "http://linktoimage.com",
        "icon": "http://linktoicon.com",
        "background": ""
      }
    ]
  },
  {
    "Name": "Person2",
    "Images": [
      {
        "image": "https://linktoimage",
        "icon": "",
        "background": "no-background"
      }
    ]
  }
]

测试,名字为“Person1”的人的第一张图片

var image=persons.FirstOrDefault(p => p.Name=="Person1").Images[0].image; // http://linktoimage.com

public class Person
{
    public string Name { get; set; }
    public List<PersonImage> Images {get;set;}
}
 public class PersonImage
{
    public string image { get; set; }
    public string icon { get; set; }
    public string background { get; set; }
}

【讨论】:

  • 我会这样做,但是数组太多了,我以人作为数组的示例,我会使用一个类但有很多
  • @MrCoolAndroid 这只是一个示例。我不知道你在想什么。您可以向这些类添加更多属性,或者如果它不同,则必须发布真实的 json。不能使用任何动态反序列化 json。
  • 我真正想做的是根据我所说的变量获取对象值,但是 json 会随着时间的推移而变化,所以每次 json 变化时我都需要编译
  • @MrCoolAndroid 随着时间的推移,一切都在发生变化,你永远不会做出一个永远不变的应用程序。任何应用程序都需要支持,而且在出现错误和功能更改之前,代码几乎每天都在变化。
  • 当然可以,但只是说它至少有 300 个或更多数组
【解决方案2】:

所以我设法通过修改 JSON 格式来做到这一点,我就是这样做的

{"Games":[
{
         "titleimage": "",
         "titleicon": "",
         "titlebackground": ""
},
{
         "titleimage": "",
         "titleicon": "",
         "titlebackground": ""
},
{
        "titleimage": "",
        "titleicon": "",
        "titlebackground": ""
}]
}

那么我可以使用 Foreach 来获得价值

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多