【发布时间】:2013-12-30 20:22:15
【问题描述】:
我有一个数据表,其中包含以下数据:
Parent Child
Dan Heidi
Dan Lauren
Alan Dan
Daphne Alan
Alan Lorna
Alan Tim
我想输出以下json:
[
{
'name': 'Daphne',
'children': [
{
'name': 'Alan',
'children': [
{
'name': 'Dan',
'children': [
{
'name': 'Heidi'
},
{
'name': 'Lauren'
}
]
},
{
'name': 'Tim'
},
{
'name': 'Lorna'
}
]
}
]
}
]
我使用 json.net 序列化器在层次结构中序列化一个级别,我原以为这是一个常见问题。有没有一种简单的方法可以将具有层次结构的 datTable 转换为具有层次结构的 json 字符串?
我猜关键是确定层次结构中有多少和哪些级别,我查看了 sql server 中的 hierarchyid 数据类型,但需要它似乎有点混乱。
谢谢, 丹
【问题讨论】:
-
Newtonsoft.JSON 绝对可以序列化多层对象。您是否尝试过将数据表重新构建为匿名类型?
-
如何将表构建为匿名类型?
-
我说错了,我认为您不能从数据表转到匿名类型,至少不容易。您可以通过以下方式强制转换它:
var people = myDataTable.Rows.Cast<MyComplexPeopleModel>()这将为您提供 Newtonsoft 可以处理的复杂类型的 IEnumerable。 -
我创建了一个具有父子属性的对象(称为 myObj),并将我的数据表加载到对象列表中。所以我现在有一个列表
将其序列化为我想要的输出的最佳方法是什么? -
您可以使用Newtonsoft:
string json = Newtonsoft.Json.JsonConvert.SerializeObject(myObj);