用c#创建嵌套的json

cWi*_*ilk 4 .net c# json nested

我可以用c#轻松创建一个扁平的序列化JSON字符串

我的问题是我想在下面创建一个嵌套字符串

[ { 
    title: "Yes",
    id : "1",
    menu: [ { 
        title: "Maybe",
        id : "3",
        alert : "No",
        menu: [ {
            title: "Maybe Not",
            id : "8",
            alert : "No",
            menu: []
        } ]
    } ]
},
{
    title: "No",
    id : "2",
    menu: []
}]
Run Code Online (Sandbox Code Playgroud)

任何帮助都会很棒

小智 13

你在使用MVC 3吗? - 做类似的事情:

return Json(myObectWithListProperties, JsonRequestBehavior.AllowGet);
Run Code Online (Sandbox Code Playgroud)

我用它来返回与我想要的JavaScript对象的结构相匹配的复杂C#对象.

例如:

var bob = new {
    name = "test",
    orders = new [] {
        new  { itemNo = 1, description = "desc" },
        new  { itemNo = 2, description = "desc2" }
    }
};

return Json(bob, JsonRequestBehavior.AllowGet);
Run Code Online (Sandbox Code Playgroud)

得到:

{
    "name": "test",
    "orders": [
        {
            "itemNo": 1,
            "description": "desc"
        },
        {
            "itemNo": 2,
            "description": "desc2"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

编辑:更有趣的嵌套:

var bob = new {
    name = "test",
    orders = new [] {
        new  { itemNo = 1, description = "desc" },
        new  { itemNo = 2, description = "desc2" }                  
    },
    test = new {
        a = new {
            b = new {
                something = "testing",
                someOtherThing = new {
                    aProperty = "1",
                    another = "2",
                    theThird = new {
                        bob = "quiteDeepNesting"
                    }
                }
            }
        }
    }
};

return Json(bob, JsonRequestBehavior.AllowGet);
Run Code Online (Sandbox Code Playgroud)

得到:

{
    "name": "test",
    "orders": [
        {
            "itemNo": 1,
            "description": "desc"
        },
        {
            "itemNo": 2,
            "description": "desc2"
        }
    ],
    "test": {
        "a": {
            "b": {
                "something": "testing",
                "someOtherThing": {
                    "aProperty": "1",
                    "another": "2",
                    "theThird": {
                        "bob": "quiteDeepNesting"
                    }
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Sha*_*awn 5

尝试使用

using System.Web.Script.Serialization;

//Assumed code to connect to a DB and get data out using a Reader goes here

Object data = new {
    a = reader.GetString(field1),
    b = reader.GetString(field2),
    c = reader.GetString(field3)
};
JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
string json = javaScriptSerializer.Serialize(data);
Run Code Online (Sandbox Code Playgroud)

这是内置的,可以节省您自己序列化为 JSON 的工作!

此示例假设您使用某种读取器从数据库中获取数据,然后使用匿名类构造要序列化的对象。您的匿名类可以根据您的需要简单或复杂,JavaScriptSerializer 将处理将其转换为 JSON。这种方法也很有用,因为您可以轻松控制它将在 JSON 中创建的 JSON 属性名称。