मैं Xenforo getNodes एपीआई से Json कोड है:

मैं सूची के लिए deserialize के लिए NewtonSoft Json का उपयोग कर रहा हूं, लेकिन मुझे नहीं पता कि इस 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 एपीआई से गतिशील परिवर्तन हो सकता है जब आप नए नोड बनाते हैं तो मुझे नहीं पता कि यह कैसे करना है ...

धन्यवाद

0
EddyLee 17 नवम्बर 2015, 06:36

2 जवाब

सबसे बढ़िया उत्तर

एक सीधा C # ऑब्जेक्ट के लिए अंतरतम JSON ऑब्जेक्ट मैप करता है, इसे 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; }
}
0
dbc 17 नवम्बर 2015, 07:57

API दस्तावेज़ के अनुसार, "नोड्स" यह तत्व नहीं है एक मानक 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)
    {
    }
}

फिर आप इस प्रकार से जोंस टेक्स्ट को डीसर्विलाइज़ कर सकते हैं:

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);
0
jhmt 17 नवम्बर 2015, 08:34