序列化JSON字符串到动态对象
本文关键字:动态 对象 字符串 JSON 序列化 | 更新日期: 2023-09-27 18:09:39
好的,如果我用错了术语,请原谅。我正在尝试做以下事情。
- 从URL 获取JSON字符串
通常对我来说这是很容易的。通常JSON对象是静态名称。
问题出现的地方是子json对象因人而异。如果你改变你的库存,它们也会改变。
现在,我需要能够将其放入对象中,并查询它(不一定是linq,但可以随意提取数据)。有人有什么消息吗?我尝试创建一个动态对象(如这里所示,将JSON反序列化为c#动态对象?),但它不适合我。
这个链接真的符合我的目的吗?我是不是实现错了?
下面是JSON的转储:http://chopapp.com/#ro46jfay
谢谢你的帮助。
Newtonsoft Json.net支持从json创建动态对象。
var obj = JsonConvert.DeserializeObject<dynamic>(json);
事实上,您的数据并不像您想象的那样动态。所有这些用作属性名称的ID都可以反序列化为Dictionary<string,SomeObject>
。
虽然你的json比这个问题更复杂,但同样的想法可以很容易地使用。
所以你的模型可以如下:
public class RGInventory
{
public string id { get; set; }
public string classid { get; set; }
public string instanceid { get; set; }
public string amount { get; set; }
public int pos { get; set; }
}
public class AppData
{
public string def_index { get; set; }
public int is_itemset_name { get; set; }
}
public class Description
{
public string type { get; set; }
public string value { get; set; }
public string color { get; set; }
public AppData app_data { get; set; }
}
public class Action
{
public string name { get; set; }
public string link { get; set; }
}
public class MarketAction
{
public string name { get; set; }
public string link { get; set; }
}
public class Tag
{
public string internal_name { get; set; }
public string name { get; set; }
public string category { get; set; }
public string category_name { get; set; }
public string color { get; set; }
}
public class RGDescription
{
public string appid { get; set; }
public string classid { get; set; }
public string instanceid { get; set; }
public string icon_url { get; set; }
public string icon_url_large { get; set; }
public string icon_drag_url { get; set; }
public string name { get; set; }
public string market_hash_name { get; set; }
public string market_name { get; set; }
public string name_color { get; set; }
public string background_color { get; set; }
public string type { get; set; }
public int tradable { get; set; }
public int marketable { get; set; }
public int commodity { get; set; }
public string market_tradable_restriction { get; set; }
public List<Description> descriptions { get; set; }
public List<Action> actions { get; set; }
public List<MarketAction> market_actions { get; set; }
public List<Tag> tags { get; set; }
}
public class RootObject
{
public bool success { get; set; }
public bool more { get; set; }
public bool more_start { get; set; }
public Dictionary<string, RGInventory> rgInventory { get; set; }
public Dictionary<string, RGDescription> rgDescriptions { get; set; }
}
现在你可以反序列化(使用Json.Net)为
var obj = JsonConvert.DeserializeObject<RootObject>(json);
层次结构如下:ROOT -> rgdescriptions -> RandomName如何访问所有随机名称及其子名称?
示例linq可以写成
var appids = obj.rgDescriptions.Select(x => x.Value.appid).ToList();