将JSON字符串序列化为动态对象

21 浏览
0 Comments

将JSON字符串序列化为动态对象

如果我使用术语不当,请原谅我。我想要做以下几点:

  1. 从URL获取JSON字符串
  2. 将该字符串解析为对象。

对我来说,通常这样做很容易。通常,JSON对象都是静态名称。

问题在于,子JSON对象会因个人而异。如果更改库存,它们也会发生变化。

现在,我需要将其放入一个对象中,并且可以查询它(不一定是使用linq,但可以随意提取数据)。有人有任何信息吗?我尝试创建一个动态对象(如此处所示:Deserialize JSON into C# dynamic object?),但对我没有起作用。

那个链接是否适合我的目的,我只是实现得不正确?

这是JSON的示例:http://chopapp.com/#ro46jfay

非常感谢您的帮助。

0
0 Comments

问题的原因是无法成功访问动态对象的层次结构和获取数据。尝试使用错误的方式来访问数据,导致无法正确获取到想要的结果。正确的访问方式应该是以字典的形式来访问,而不是使用错误的方式。

解决方法是使用正确的访问方式来获取数据。对于给定的 JSON 数据,可以按照以下方式访问所有的 random names 和它们的子项:

var obj = JsonConvert.DeserializeObject<dynamic>(json);
foreach (var item in obj["rgDescriptions"])
{
    var randomName = item["RandomName"];
    // 访问 randomName 的子项
    foreach (var child in randomName)
    {
        // 处理子项的逻辑
    }
}

通过以上代码,可以成功地访问所有的 random names 和它们的子项,并进行相应的处理。

0
0 Comments

问题的出现原因:

该问题的出现是因为需要将一个JSON字符串反序列化为动态对象,但是JSON字符串中的一些属性名不符合C#的合法标识符命名规范。

解决方法:

解决方法是根据JSON字符串的结构定义一个与之对应的C#类,并使用Json.Net库中的JsonConvert.DeserializeObject方法进行反序列化操作。

具体解决步骤如下:

1. 定义与JSON字符串对应的C#类:

- RGInventory类

- AppData类

- Description类

- Action类

- MarketAction类

- Tag类

- RGDescription类

- RootObject类

2. 使用JsonConvert.DeserializeObject方法进行反序列化:

   var obj = JsonConvert.DeserializeObject(json);
   

3. 如果需要访问随机名称和它们的子元素,可以使用LINQ表达式进行查询:

   var appids = obj.rgDescriptions.Select(x => x.Value.appid).ToList();
   

通过定义与JSON字符串对应的C#类,并使用JsonConvert.DeserializeObject方法进行反序列化操作,可以将JSON字符串反序列化为动态对象,并可以方便地访问其中的属性和子元素。

0