c#parent子列表添加ID

时间:2015-08-06 13:43:30

标签: c# parent-child

我有一个父子列表,我将其作为JSON

public class Item
{
    public Item()
    {
       this.Items = new List<Item>();
    }

    public string Name { get; set; }
    public DateTime Created { get; set; }
    public string Content { get; set; }
    public string UserId { get; set; }
    List<Item> Items { get; set; }
}

现在假设我得到一个JSON,我将反序列化为

 string json = "json in here"

 List<Item> listItems = JsonConvert.Dezerialize<List<Item>>(json);

我的问题:如何解析List<Item>并动态添加ID,以便它会是这样的?

public class Item
{
    public Item()
    {
       this.Items = new List<Item>();
    }

    public string Id { get; set; }
    public string ParentId { get; set; }
    public string Name { get; set; }
    public DateTime Created { get; set; }
    public string Content { get; set; }
    public string UserId { get; set; }
    List<Item> Items { get; set; }
}

Id是项目ID(例如可以是Guid),ParentId是项目的父项ID。如果Item没有父项,则ParentId为null。如果ParentId为null,则Item为top项。可以有多个父项。

1 个答案:

答案 0 :(得分:1)

  

可以是Guid例如

这使很多更容易,因为您不必跟踪已使用的ID。现在这是一个简单的递归工作:

void SetIDs(Item item, string parentId)
{
    item.ParentId = parentId;
    item.Id = Guid.NewGuid().ToString();
    foreach (var i in item.Items)
        SetIDs(i, item.Id);
}

然后只需使用顶级项目的初始空ID(根据您的要求,顶层有null父ID)调用它:

SetIDs(someItem, null);

(如果您确实需要跟踪ID,例如使用int,那么您可能要么查看更高范围的变量,这可能很棘手或out个参数或者那种可能丑陋的性质。)