我有一个父子列表,我将其作为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项。可以有多个父项。
答案 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
个参数或者那种可能丑陋的性质。)