Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用c创建嵌套json#_C#_.net_Json_Nested - Fatal编程技术网

C# 使用c创建嵌套json#

C# 使用c创建嵌套json#,c#,.net,json,nested,C#,.net,Json,Nested,我能够使用c非常轻松地创建平面序列化JSON字符串# 我的问题是我想创建一个如下所示的嵌套字符串 [ { title: "Yes", id : "1", menu: [ { title: "Maybe", id : "3", alert : "No", menu: [ { title: "Maybe Not", id : "8", a

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

任何帮助都很好

您使用的是MVC 3吗?-做一些类似于:

return Json(myObectWithListProperties, JsonRequestBehavior.AllowGet);
我使用它返回与我想要的JavaScript对象结构匹配的复杂C#对象

e、 g:

给出:

{
    "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属性名称。

您可以使用
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);

注意:实现这一点还有其他方法,但我一直在使用这种方法

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

您使用的是JSON.Net库还是自定义实现?检查库是否有帮助-将为您节省大量时间…您将什么定义为嵌套字符串?@cWilk,您应该发布代码(需要1行或2行),显示您选择的创建JSON的特定“非常容易”的方式。从SP返回数据-创建的对象listItem[]li=new listItem[count]-returnString=newJavaScriptSerializer().Serialize(li);return returnstring不确定这是否正是我想要的,我不知道调用数据库时会有多少嵌套级别,多个对象,可能有多个对象未检查限制(如果有,但刚刚打开一个应用程序,其中装运的物品集合的状态都是复杂的对象。似乎运行得很好,这很有效..试一试,如果你使用MVC 3,希望它会是一个快速测试,我可能会提供更多的信息,我查询数据库,返回一个10个物品的列表,每个物品都有唯一的ID。)的和父键,我想构建我的对象,然后序列化为JSON,我相信构建对象并将正确的子对象分配给正确的父对象是我的问题所在,我猜我的问题是,首先如何创建复杂的c#对象?我可能应该提供更多信息,我查询数据库假设一个10个项目的列表,每个项目都有唯一的ID和父项密钥,我想构建我的对象,然后序列化为JSON,我相信对象的构建,并将正确的子项分配给正确的父项,这就是我的问题所在——没有问题——我在自己开发的一个应用程序中也做了同样的事情。我从DB中获取结果,并使用它创建了一个匿名类,然后我将其传递给序列化方法。因此对于上面的“data”对象,您可以这样构造它:new{a=reader.GetString(field1),b=reader.GetString(field2),c=reader.GetString(field3)};对传递给JavaScriptSerializer的Serialize方法的对象使用匿名类声明,可以轻松控制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"
                     } 
}