使用 c# 创建嵌套 json

本文关键字:json 嵌套 创建 使用 | 更新日期: 2023-09-27 18:32:41

我能够用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: []
}]

任何帮助都会很棒

使用 c# 创建嵌套 json

您使用的是 MVC 3 吗? - 做类似的事情:

return Json(myObectWithListProperties, JsonRequestBehavior.AllowGet);

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

例如:

var bob = new {
    name = "test",
    orders = new [] {
        new  { itemNo = 1, description = "desc" },
        new  { itemNo = 2, description = "desc2" }
    }
};
return Json(bob, JsonRequestBehavior.AllowGet);

给:

{
    "name": "test",
    "orders": [
        {
            "itemNo": 1,
            "description": "desc"
        },
        {
            "itemNo": 2,
            "description": "desc2"
        }
    ]
}

编辑:更多的嵌套乐趣:

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);

给:

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

尝试使用

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);

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

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

using System.Web.Script.Serialization;
 

var strNJson = new
            {
                to = "hello",
                notification = new
                {
                    title = "textTitle",
                    body = "bodyText"
                }
            };
            JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
            string json = javaScriptSerializer.Serialize(strNJson);
{   "to":"hello",
       "notification": {
                        "title":"titleText",
                         "body":"bodyText"
                     } 
}
您可以使用

System.Dynamic命名空间下的ExpandoObject

下面是实现解决方案的一个小片段:

dynamic parameters = new dynamic[2];
parameters[0] = new ExpandoObject();
parameters[0].title = "Yes";
parameters[0].id = "1";
parameters[0].menu = new dynamic[1];
parameters[0].menu[0] = new ExpandoObject();
parameters[0].menu[0].title = "Maybe";
parameters[0].menu[0].id = "3";
parameters[0].menu[0].alert = "No";
parameters[0].menu[0].menu = new dynamic[1];
parameters[0].menu[0].menu[0] = new ExpandoObject();
parameters[0].menu[0].menu[0].title = "Maybe Not";
parameters[0].menu[0].menu[0].id = "8";
parameters[0].menu[0].menu[0].alert = "No";
parameters[0].menu[0].menu[0].menu = new dynamic[0];
parameters[1] = new ExpandoObject();
parameters[1].title = "No";
parameters[1].id = "2";
parameters[1].menu = new dynamic[0];

string json = JsonConvert.SerializeObject(parameters, Formatting.Indented);
Console.WriteLine(json);

这是小提琴的工作

注意:还有其他方法可以实现此目的,但我一直在使用这种方法。