如何构建Json树

本文关键字:Json 构建 何构建 | 更新日期: 2023-09-27 18:16:10

这是我要构建的json:

{
    id: 0,
    item: [{ id: 1, text: "1111"
    }, {
        id: 2,
        text: "222222",
        item: [{ id: "21", text: "child" }]
        }, {
        id: 3, text: "3333"
    }]
}

现在我不能造树,我只能造这样的东西:

[{"id":1,"text":"1111"},{"id":21,"text":"child"]

我用下面的代码构建它:

var serializer = new JavaScriptSerializer();
var jsonString = serializer.Serialize(listOfPairsOfTextAndId);

但是我如何在c#中构建给定的树?

如何构建Json树

第一个问题是,在c#中使用匿名对象来描述你的图形有点困难。但是你可以创建一个类:

class Item {
  public Int32 id { get; set; }
  public String text { get; set; }
  public Item[] item { get; set; }
}

你可以创建你的对象图:

var graph = new Item {
  id = 0,
  item = new[] {
    new Item {
      id = 1,
      text = "1111"
    },
    new Item {
      id = 2,
      text = "222222",
      item = new[] {
        new Item {
          id = 21,
          text = "child"
        }
      }
    },
    new Item {
      id = 3,
      text = "3333"
    }
  }
};

您正在使用Microsoft JSON序列化器,这将导致以下JSON:

<>之前{" id ": 0,"文本":空,"项":[{" id ": 1、"文本":"1111","项目":零},{" id ": 2,"文本":"222222","项目":[{" id ": 21岁的"文本":"孩子","项目":零}]},{" id ": 3,"文本":"3333","项目":零}]}之前

这不是您想要的,因为有额外的null值。要解决这个问题,可以使用JSON。净。您必须为被序列化的类添加一些额外的属性:

class Item {
  public Int32 id { get; set; }
  [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
  public String text { get; set; }
  [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
  public Item[] item { get; set; }
}
然后使用以下代码执行序列化:
var jsonString = JsonConvert.SerializeObject(graph);
你得到这个JSON: <>之前{" id ": 0,"项":[{" id ": 1、"文本":" 1111 "},{" id ": 2,"文本":"222222","项目":[{" id ": 21岁的"文本":"孩子"}]},{" id ": 3,"文本":" 3333 "})}之前

除了你的问题中的语法错误,这就是你所要求的。

您需要创建一些对象,其中包含您想要序列化为该格式的数据。我使用在线生成器创建了几个快速的类,并根据需要进行了重构。

下面是类

public class Item2
{
    public string id { get; set; }
    public string text { get; set; }
}
public class Item
{
    public int id { get; set; }
    public string text { get; set; }
    public List<Item2> item { get; set; }
}
public class RootObject
{
    public int id { get; set; }
    public List<Item> item { get; set; }
}

您将首先创建RootObject并根据需要设置它的属性(确保初始化List)。之后,只需对组成输出的其他类执行相同的操作。

完成后,简单地序列化RootObject实例,您将得到所请求的输出。

我使用http://json2csharp.com/根据所需的JSON输出生成这些类。

可以创建如下函数

   public static string GetJSON(object obj)
    {
        var oSerializer = new JavaScriptSerializer();
        var sbJsonResults = new StringBuilder();
        oSerializer.Serialize(obj, sbJsonResults);
        return sbJsonResults.ToString();
    }

然后调用这个函数。

编辑1

您可以创建想要使用的表单的自定义类。
创建List<class>,并将其传递给上面的函数