gpt4 book ai didi

c# - 仅反序列化根/特定 json 对象 c#

转载 作者:行者123 更新时间:2023-11-30 23:06:12 25 4
gpt4 key购买 nike

所以我有一个简短的问题。我有一个非常大的 json 文件,该文件在一个数组中包含大约 20,000 个 json 对象,并且这些对象中的每一个都有 3 个额外的嵌套对象(彼此分开)。示例:

    [
{
"id": 0,
"name": "Dwarf remains",
"exchangeable": false,
"members": true,
"placeholder_id": 17851,
"actions": {
"inventory": {
"fourthop": "Destroy"
},
"world": {
"secondop": "Take"
}
}
},

{
"id": 1,
"name": "Toolkit",
"exchangeable": false,
"members": true,
"placeholder_id": 17852,
"actions": {
"inventory": {
"fourthop": "Destroy"
},
"world": {
"secondop": "Take"
}
}
},

{
"id": 2,
"name": "Cannonball",
"exchangeable": true,
"members": true,
"placeholder_id": 17853,
"values": {
"value": 5,
"alchemy_high": 3,
"alchemy_low": 2
},
"actions": {
"inventory": {
"fourthop": "Drop"
},
"world": {
"secondop": "Take"
}
}
},

{
"id": 3,
"name": "Nulodion\u0027s notes",
"exchangeable": false,
"members": true,
"placeholder_id": 17854,
"actions": {
"inventory": {
"0": "Read",
"fourthop": "Destroy"
},
"world": {
"secondop": "Take"
}
}
},

{
"id": 4,
"name": "Ammo mould",
"exchangeable": false,
"members": true,
"placeholder_id": 17855,
"values": {
"value": 5,
"alchemy_high": 3,
"alchemy_low": 2
},
"actions": {
"inventory": {
"fourthop": "Drop"
},
"world": {
"secondop": "Take"
}
}
},

{
"id": 5,
"name": "Instruction manual",
"exchangeable": false,
"members": true,
"placeholder_id": 17856,
"values": {
"value": 10,
"alchemy_high": 6,
"alchemy_low": 4
},
"actions": {
"inventory": {
"0": "Read",
"fourthop": "Drop"
},
"world": {
"secondop": "Take"
}
}
},

{
"id": 6,
"name": "Cannon base",
"exchangeable": true,
"members": true,
"noted_id": 7,
"placeholder_id": 17857,
"values": {
"value": 187500,
"alchemy_high": 112500,
"alchemy_low": 75000
},
"actions": {
"inventory": {
"0": "Set-up",
"fourthop": "Drop"
},
"world": {
"secondop": "Take"
}
}
},

{
"id": 8,
"name": "Cannon stand",
"exchangeable": true,
"members": true,
"noted_id": 9,
"placeholder_id": 17858,
"values": {
"value": 187500,
"alchemy_high": 112500,
"alchemy_low": 75000
},
"actions": {
"inventory": {
"fourthop": "Drop"
},
"world": {
"secondop": "Take"
}
}
}
]

现在如果我只想反序列化每个项目的根对象:

"id": 8,
"name": "Cannon stand",
"exchangeable": true,
"members": true,
"noted_id": 9,
"placeholder_id": 17858,

(本节)我是否仍需要为嵌套在每个项目中的值、操作和世界对象创建其他三个附加类,或者是否有一种方法可以简单地使用一个仅类似于没有这 3 个区域的根对象的类,并且仍然将其全部反序列化合适吗?

或者甚至只是简单地提取项目名称和 ID# 并将它们放入列表中?我问是因为如果不可能的话,我宁愿不去浪费我的时间。我已经阅读了其他几个线程,但似乎无法找到针对此特定实例的明确指示。我读过的关于反序列化嵌套 json 对象的其他线程和文章/教程往往是在谈论 json 字符串,这些字符串要么不是数组,要么只希望获取单个元素,要么嵌套的方式不同。

这可能吗?如果是的话,你能不能简单地给我一点指示或指向可以解释这种想法的东西的链接。不一定要超深,只需要有人指出方向,这样我就可以更容易地找到它。我已经搜索了几个小时的主题,但没有成功。

还有一个额外的问题,什么是存储项目名称和 ID 号(而不是数据库)的最佳方式,以便用户可以在具有自动完成功能的文本框/组合框中搜索项目名称,并且一旦项目是选择它将使用相应的 ID 号在另一个 API 中搜索该号码。

有什么合适的方法可以做到这一点,还是我应该坚持我最初的想法,即简单地将这个 json 数组导入数据集,然后将其保存为 xml,并在启动时简单地将 xml 导入数据集?

我宁愿简单地避免这种情况,这样用户就不需要不断检查 xml 文件的新版本,他们可以在每次启动时简单地获取最新的 json 并使用它。这样我只需要担心更改 api 上的文件。

注意:我试图确保这不是重复的帖子,并查看了多个线程但无济于事。然而,我只睡了几个小时,我完全有可能犯了一个错误。 如果我这样做了,这是一个重复的帖子,请告诉我,如果是的话,我提前道歉。我现在尽我最大的努力确保我没有重复线程。

最佳答案

您可以忽略不想反序列化的属性,也可以从目标类中删除该属性。

public class Inventory
{
public string fourthop { get; set; }
}

public class World
{
public string secondop { get; set; }
}

public class Actions
{
public Inventory inventory { get; set; }
public World world { get; set; }
}

public class RootObject
{
public int id { get; set; }
public string name { get; set; }
public bool exchangeable { get; set; }
public bool members { get; set; }
public int placeholder_id { get; set; }
[JsonIgnore]//Ignore deserialization
public Actions actions { get; set; }
}

var result = JsonConvert.DeserializeObject<List<RootObject>>(json);

关于c# - 仅反序列化根/特定 json 对象 c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48386712/

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