gpt4 book ai didi

c# - 将 JSON 转换为 C# 复杂对象

转载 作者:太空宇宙 更新时间:2023-11-03 20:48:10 25 4
gpt4 key购买 nike

我在 C# 中有这个结构,我想创建可以成功转换成它的 JSON,这样我就可以很容易地找到我在 JS 逻辑中的错误。

public class Tree
{
public Root Root { get; set; }
public Tree()
{}
}

public class Root : Node
{
public Root(int _id, int _fk, string _name, string _code, List<Node> _children, List<Item> _leaves)
: base(_id, _fk, _name, _code, _children, _leaves)
{
}

public Root()
{ }
}

public abstract class Node
{
public int? ID { get; set; }
public int? FK { get; set; }
public string Name { get; set; }
public string Code { get; set; }
public List<Node> children { get; set; }
public List<Item> leaves { get; set; }

public Node(int? _id, int? _fk, string _name, string _code, List<Node> _children, List<Item> _leaves)
{
ID = _id;
FK = _fk;
Name = _name;
Code = _code;
children = _children;
leaves = _leaves;
}
public Node ()
{}
}

public class Item
{
public string Code { get; set; }
public string Desc { get; set; }
public string Uom { get; set; }
public float? Measurements { get; set; }
public int? FK { get; set; }
public int? Tier { get; set; }
public bool IsADPresent { get; set; }
}

以及我尝试在命令 JsonConvert.DeserializeObject<Tree>(tree) 中输入的最基本的 JSON是:

{
"Tree": {
"Root": {
"children": [],
"leaves": [],
"FK": 1,
"ID": 1,
"Name": " LOGISTICS",
"Code": "PT01"
}
}
}

但我在 Tree 中仍然得到 null;更不用说当 JSON 变得更加复杂时(树最多可以有第 5 个孙子)。

谢谢

更新:从 JSON 中删除 Tree 后出现异常: Newtonsoft.Json.JsonSerializationException: 'Could not create an instance of type StatusUpdater.Models.NPoco.Node. Type is an interface or abstract class and cannot be instantiated. Path 'Root.children[0].children', line 1, position 33.'

最佳答案

您应该从 JSON 中删除 Tree,因为 Tree 是目标类型,不需要包含在 JSON 中。

{
"Root": {
"children": [],
"leaves": [],
"FK": 1,
"ID": 1,
"Name": " LOGISTICS",
"Code": "PT01"
}
}

编辑:为了反序列化您的抽象 Node 元素,您将需要一个具体类型和一个自定义转换器。参见 Deserializing a collection of abstract classes并列出所有重复链接

关于c# - 将 JSON 转换为 C# 复杂对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58485321/

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