来自Xenforo getNodes API的Json代码:
我使用NewtonSoft Json反序列化到List但我不知道如何为这个json定义类
我希望能得到所有人的帮助
{
"count": 1,
"nodes": {
"1": {
"node_id": 1,
"title": "Main Category",
"description": "",
"node_name": null,
"node_type_id": "Category",
"parent_node_id": 0,
"display_order": 1,
"display_in_list": 1,
"lft": 1,
"rgt": 4,
"depth": 0,
"style_id": 0,
"effective_style_id": 0
},
}
}
因为在您创建新节点时,可以从Xenforo API进行动态更改,因此我不知道如何执行此操作...
由于
答案 0 :(得分:0)
根据API document,“nodes”元素不是标准的json数组格式,因此您可能希望使用这样的自定义JsonConverter
:
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
public class NodesConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(Node[]);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
var nodes = new List<Node>();
foreach (JProperty property in serializer.Deserialize<JObject>(reader).Properties())
{
var node = property.Value.ToObject<Node>();
// parse names as node_number
node.node_number = int.Parse(property.Name);
nodes.Add(node);
}
return nodes.ToArray();
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
}
}
然后您可以按如下方式反序列化json文本:
public class XenNode
{
public int count { get; set; }
[JsonConverter(typeof(NodesConverter))]
public Node[] Nodes { get; set; }
}
public class Node
{
public int node_number { get; set; }
public int node_id { get; set; }
public string title { get; set; }
public string description { get; set; }
public string node_name { get; set; }
public string node_type_id { get; set; }
public int parent_node_id { get; set; }
public int display_order { get; set; }
public int display_in_list { get; set; }
public int lft { get; set; }
public int rgt { get; set; }
public int depth { get; set; }
public int style_id { get; set; }
public int effective_style_id { get; set; }
}
// Deserialize
XenNode xenNode = JsonConvert.DeserializeObject<XenNode>(json);
答案 1 :(得分:0)
最里面的JSON对象映射到一个简单的C#对象,称之为Node
;您可以使用http://json2csharp.com/为您生成此课程。 "nodes"
对象看起来有一组变量属性,其名称是查找键,其值是先前定义的Node
。然后,所有这些都包含在根对象中。
因此:
public class Node
{
public int node_id { get; set; }
public string title { get; set; }
public string description { get; set; }
public object node_name { get; set; }
public string node_type_id { get; set; }
public int parent_node_id { get; set; }
public int display_order { get; set; }
public int display_in_list { get; set; }
public int lft { get; set; }
public int rgt { get; set; }
public int depth { get; set; }
public int style_id { get; set; }
public int effective_style_id { get; set; }
}
public class RootObject
{
public int count { get; set; }
public Dictionary<string, Node> nodes { get; set; }
}