Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.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#_Json - Fatal编程技术网

C# 在C中创建JSON数组#

C# 在C中创建JSON数组#,c#,json,C#,Json,好的,所以我尝试通过http连接发送POST命令,并使用JSON格式来实现。我正在用C#编写程序来实现这一点,我想知道如何格式化一个值数组,将其作为JSON传递给服务器 目前我有: new{name=“command”,index=“X”,optional=“0”} 这在JSON中转换为: "name": "command", "index": "X", "optional": "0" "items": [ { "name": "command", "

好的,所以我尝试通过http连接发送POST命令,并使用JSON格式来实现。我正在用C#编写程序来实现这一点,我想知道如何格式化一个值数组,将其作为JSON传递给服务器

目前我有:

new{name=“command”,index=“X”,optional=“0”}

这在JSON中转换为:

"name": "command",
"index": "X",
"optional": "0"
"items": 
[
    {
        "name": "command",
        "index": "X",
        "optional": "0"
    },
    {
        "name": "status",
        "index": "X",
        "optional": "0"
    }
]
我想创建一个数组,叫做items,其中每个元素都包含这三个值。因此,它本质上是一个对象数组,其中对象包含名称、索引和可选字段

我的猜测是这样的:

new {items = [(name = "command" , index = "X", optional = "0"), 
              (name = "status" , index = "X", optional = "0")]}
如果语法正确,将在JSON中转换为:

"name": "command",
"index": "X",
"optional": "0"
"items": 
[
    {
        "name": "command",
        "index": "X",
        "optional": "0"
    },
    {
        "name": "status",
        "index": "X",
        "optional": "0"
    }
]

但是,显然我做错了。思想?非常感谢您的帮助。

您就快到了。这应该可以做到:

new {items = new [] {
    new {name = "command" , index = "X", optional = "0"}, 
    new {name = "command" , index = "X", optional = "0"}
}}
如果源是某种类型的可枚举项,则可能需要执行以下操作:

new {items = source.Select(item => new 
{
    name = item.Name, index = item.Index, options = item.Optional
})};

最好为每个项目创建一些类,而不是使用匿名对象。在序列化的对象中,应该有这些项的数组。例如:

public class Item
{
    public string name { get; set; }
    public string index { get; set; }
    public string optional { get; set; }
}

public class RootObject
{
    public List<Item> items { get; set; }
}
公共类项目
{
公共字符串名称{get;set;}
公共字符串索引{get;set;}
公共字符串可选{get;set;}
}
公共类根对象
{
公共列表项{get;set;}
}
用法:

var objectToSerialize = new RootObject();
objectToSerialize.items = new List<Item> 
                          {
                             new Item { name = "test1", index = "index1" },
                             new Item { name = "test2", index = "index2" }
                          };
var objectToSerialize=new RootObject();
objectToSerialize.items=新列表
{
新项{name=“test1”,index=“index1”},
新项{name=“test2”,index=“index2”}
};
这样,如果需要更改数据结构,就不必多次更改


p、 这是一个非常好的工具,用于复杂的
json
s

以及匿名类型(我更喜欢而不是),这只是另一种方法

void Main()
{
    var x = new
    {
        items = new[]
        {
            new
            {
                name = "command", index = "X", optional = "0"
            },
            new
            {
                name = "command", index = "X", optional = "0"
            }
        }
    };
    JavaScriptSerializer js = new JavaScriptSerializer(); //system.web.extension assembly....
    Console.WriteLine(js.Serialize(x));
}
结果:


{“items”:[{“name”:“command”,“index”:“X”,“optional”:“0”},{“name”:“command”,“index”:“X”,“optional”:“0”}]}

C#没有JSON文本。你需要使用匿名类型。这就是我要做的。因此,
新的
如果你想提供JSON系列化,看看:。如果你有ASP.NET和Web Tools 2012,你也有这个很棒的功能:)你能解释一下这是如何回答这个问题的吗?@Dave如果你需要动态地这样做呢。就像在for循环中一样?如果你在for循环中,那么你必须创建一个真实的模型,而不是使用匿名类型。如果您可以使用LINQ(如果您使用LINQ,我更愿意这样做),那么您可以简单地将结果“投影”到一个匿名模型中,如我的示例所示。我更新了我的答案,添加了一个示例,说明您可以使用可枚举源执行哪些操作。