我正在开发一个MVC应用程序,该应用程序从SQL Server中的表中检索数据,该表的结构如下:
+-----------------------------------+
| Id | Name | Hierarchy | Depth |
|-----------------------------------|
| 01 | Justin | / | 0 |
| 02 | Chris | /1 | 1 |
| 03 | Beth | /1/1 | 2 |
+-----------------------------------+
Hierarchy
列中的示例数据是hierarchyid
数据类型的字符串表示形式,并且该Depth
列是使用hierarchyid::GetLevel()
方法计算的。
使用Entity Framework 4.1,我已将上表映射到此类:
public class Node {
public int Id { get; set; }
public string Name { get; set; }
public string HierarchyPath { get; set; } // String representation of the hierarchyid
public int Depth { get; set; }
}
我想使用此信息通过JS Visualizations
Toolkit
向用户显示层次结构的图形表示,这需要对数据进行结构化:
var node = {
id: 1,
name: 'Justin'
children: [{
id: 2,
name: 'Chris',
children: [{
id: 3,
name: 'Beth',
children: []
}]
}]
}
我在开发将模型列表转换为结构化JSON对象的逻辑时遇到了麻烦。有什么建议?
编辑:我现在没有时间修复下面的答案,但是鉴于问题中的其他信息,我怀疑您想保留a Dictionary<int, HierarchicalNode>
而不是a,List<HierarchicalNode>
以便您不依赖任何排序…
我会从一开始就忘记JSON表示,而将精力集中在构建层次结构的内存POCO表示中。为此,我将使用以下方法:
class HierarchicalNode
{
private readonly List<HierarchicalNode> children =
new List<HierarchicalNode>();
public List<HierarchicalNode> Children { get { return children; } }
private readonly string name;
public string Name { get { return name; } }
private readonly int id;
public int Id { get { return id; } }
public HierarchicalNode(string name, int id)
{
this.name = name;
this.id = id;
}
}
然后像这样构建树:
// Make sure we get everything in a sensible order, parents before children
var query = context.Nodes.OrderBy(x => x.Depth);
var root = new HierarchicalNode("Root", 0);
foreach (var node in query)
{
var current = root;
foreach (string part = node.HierarchyPath.Split(new[] {'/'},
StringSplitOptions.RemoveEmptyEntries))
{
int parsedPart = int.Parse(part);
current = current.Children[parsedPart - 1];
}
current.Children.Add(new HierarchicalNode(node.Name, node.Id));
}
问题内容: 我在这里发现了同样的问题… …但是没有正确的答案。 最好的建议之一是将嵌套对象包装到新类中,但是这种方法引入了另一个问题:乐高名称。 在我的示例中,此类的最逻辑名称是与父类相同的名称,当然这是不可能的。我的示例很简单,我只想消除父类中的“语言”属性。有人可以帮我做吗? json的示例: 问题答案: 如果JSON属性名称与c#命名约定冲突,则可以在序列化期间使用或批注替换其他名称。 例如
问题内容: 我在 .NET for WinRT(C#)中 ,我想将JSON字符串反序列化为,然后将字典值稍后转换为实际类型。JSON字符串可以包含对象层次结构,我也希望在其中包含子对象。 这是应该能够处理的示例JSON: 我尝试使用 DataContractJsonSerializer 这样做: 实际上,这对于第一个级别是可行的,但是 “父母” 只是一个不能强制转换为的对象: 然后,我尝试使用 J
问题内容: 请记住,JSON结构事先是未知的,即它是完全任意的,我们只知道它是JSON格式。 例如, 以下JSON 应该反序列化为具有类似key的类似Map的结构(为简洁起见,不包括以上所有内容): 我目前正在调查杰克逊,所以我们有: 但是,生成的Map实例基本上是嵌套Map的Map: 我需要使用“圆点表示法”的扁平化键和扁平化键,如上。 我不希望自己实现此功能,尽管目前我看不到其他任何方式。 问
我有一个类别树,由以下内容表示。 这给出了一个dataframe,如下所示: 树中最高的节点的parent_id等于-1,因此树可以用图形表示如下: 我需要生成以下DataFrame。 该树是动态生成的,可以具有任意数量的级别,因此下面的树 应产生以下结果:
问题内容: 我有以下XML文件,我需要在服务器中将其转换为JSON。最初,我认为我会将其转换为Dictionary,然后使用JavaScriptSerializer将其转换为JSON,但由于每列可能具有不同的值类型,所以我认为它不会起作用。有人在C#/ LINQ中做过类似的事情吗? 我需要保留每列的值类型(布尔,字符串,整数)。 我会很高兴就此提出任何建议,因为我刚刚开始使用XML。谢谢。 问题答
背景: 需要将扁平化数组转换成树形数组。 比如原始数组如下: 期望转换后的数据