我构建了一个导航树,并使用这个函数将结构保存在一个数组中。
function parseTree(html) {
var nodes = [];
html.parent().children("div").each(function () {
var subtree = $(this).children("div");
var item = $(this).find(">span");
if (subtree.size() > 0)
nodes.push([item.attr("data-pId"), item.attr("data-id"), parseTree(subtree)]);
else
nodes.push(item.attr("data-pId"), item.attr("data-id"));
});
return nodes;
}
然后我将数据序列化
var tree = $.toJSON(parseTree($("#MyTree").children("div")));
得到这个数组
[
["881150024","881150024",
[
"994441819","881150024",
"214494418","881150024"
]
],
["-256163399","-256163399",
[
"977082012","-256163399",
"-492694206","-256163399",
[
"1706814966","-256163399",
["-26481618","-256163399"]
]
]
]
]
并通过ajax发送
$.ajax({
url: "Editor/SerializeTree",
type: "POST",
data: { tree: tree },
success: function (result) {
alert("OK");
}
});
问题:如何用JavaScriptSerializer在C#?中反序列化此JSON
发布于 2011-05-09 05:48:52
这里似乎有一个节点数组,每个节点都有一组字符串或另一个节点数组,对吗?您可以做的第一件事就是将它反序列化为如下所示的List<object>
:
string treeData = "..."; // The JSON data from the POST
JavaScriptSerializer js = new JavaScriptSerializer();
List<object> tree = js.Deserialize <List<object>>(treeData);
这将将您的JSON转换成一个对象列表,但是您需要手动确定什么是什么(如果每个对象是一个字符串还是另一个List<object>
)。
不过,通常情况下,使用某种类或结构来表示给序列化程序的数据的“模式”是有帮助的,但这比上面的工作要多一些。
在这个实例中,您需要输入数据作为一个实际的JSON对象,而不仅仅是一个数组。假设您有这个JSON (基于上面的数据):
{id: "root", children: [
{id: "881150024"},
{id: "881150024", children: [
{id: "994441819"}, {id: "881150024"}]},
{id: "-256163399"},
{id: "-256163399", children: [
{id: "-492694206"},
{id: "-256163399", children: [
{id: "1706814966"},
{id: "-256163399", children: [
{id: "-26481618"}, {id: "-256163399"}]}
]}]}]}
如果你有这样的课:
public class Node
{
public String id;
public List<Node> children;
}
然后,您可以这样做:
string treeData = "..."; // The JSON data from the POST
JavaScriptSerializer js = new JavaScriptSerializer();
Node root = js.Deserialize<Node>(treeData);
这将更容易在代码中使用。
发布于 2011-05-09 06:11:03
考虑到@_rusty的回答。
在MVC3中,可以将JSON数据转化为操作,因此控制器代码非常简单
[HttpPost]
public void SerializeTree(IList<Node> tree)
{
// tree is deserialized JSON here
}
发布于 2014-03-20 20:22:39
对于那些仍然到处使用VB.Net的少数几个人来说:
Imports System.Web.Script.Serialization
'wsvcResponse<string> contains the following JSON object: { "foo":"bar", "foo2": { "bar2": "foobar" } }
Dim jsSerializer As New JavaScriptSerializer()
Dim jsonObject As List(Of Object) = jsSerializer.Deserialize(Of Object)(wsvcResponse)
Dim foo As String = jsonObject("foo").ToString ' "bar"
Dim bar2 As String = jsonObject("foo2")("bar2").ToString ' "foobar"
https://stackoverflow.com/questions/5937450
复制相似问题