1

这是我要构建的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# 中构建给定的树?

4

3 回答 3

3

第一个问题是在 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,"text":null,"item":[{"id":1,"text":"1111","item":null},{"id":2,"text" :"222222","item":[{"id":21,"text":"child","item":null}]},{"id":3,"text":"3333","项目“:空}]}

null由于额外的价值,这并不完全是您想要的。要解决此问题,您可以改用JSON.NET。您必须为要序列化的类添加一些额外的属性:

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,"item":[{"id":1,"text":"1111"},{"id":2,"text":"222222","item":[{" id":21,"text":"child"}]},{"id":3,"text":"3333"}]}

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

于 2013-05-31T12:31:32.043 回答
1

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

这是课程

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一个并根据需要设置它的属性(确保初始化列表)。之后,只需对构成输出的其他类执行相同操作即可。

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

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

于 2013-05-31T12:18:50.557 回答
-1

你可以像这样创建函数

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

然后调用这个函数。

编辑 1

您可以创建要使用的自定义类。
创建List<class>它并在上面的函数中传递
它会起作用。

于 2013-05-31T12:13:51.497 回答