Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.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# 不带名称的Json.net动态方括号_C#_Json_Dynamic_Json.net - Fatal编程技术网

C# 不带名称的Json.net动态方括号

C# 不带名称的Json.net动态方括号,c#,json,dynamic,json.net,C#,Json,Dynamic,Json.net,是否可以使用动态json创建括号,而json字符串中不显示列表/数组的名称?否则,我将需要重写整个部分 问题是,我还没有弄清楚如何在没有名称的情况下在dymanic json中创建括号。在我的json字符串中,值将有一个父括号包装其所有条目,然后一个括号包装时间戳,另一个括号包装书籍包装时间戳和书籍的括号前面不应出现名称。 使用这个,我非常接近我想要的格式,但是我错过了时间和剩余条目的括号分隔 示例代码: JObject jsonobject = new JObject(); JObject j

是否可以使用动态json创建括号,而json字符串中不显示列表/数组的名称?否则,我将需要重写整个部分

问题是,我还没有弄清楚如何在没有名称的情况下在dymanic json中创建括号。在我的json字符串中,值将有一个父括号包装其所有条目,然后一个括号包装时间戳,另一个括号包装书籍包装时间戳和书籍的括号前面不应出现名称。

使用这个,我非常接近我想要的格式,但是我错过了时间和剩余条目的括号分隔

示例代码:

JObject jsonobject = new JObject();
JObject jsonobject2 = new JObject();
dynamic topObject = jsonobject;
topObject.records = new JArray() as dynamic;
dynamic midObject = jsonobject2;
midObject.value = new JArray() as dynamic;
dynamic record = new JObject();
record.TIMESTAMP = DateTime.Now.ToString("MMMM dd yyyy HH:mm:ss");
record.ID = "sampleid";
midObject.value.Add(record);
//query for data
//loop through query
// add to record when data found ex:record.author=dr[0].ToString();
// midObject.value.Add(record);
// finished add data from query
topObject.records.Add(midObject);

string jsonstr = topObject.ToString();    
电流输出:

{
"records": [
{
"value": [
{
"TIMESTAMP": "January 03 2017 09:46:15",
"ID": "sampleID"
},
{
"Title": "Book2",
"Author": "author1"
},
{
"Title": "Book1"
"Author": "author1"
"Notes": "testtest"
}
]
}
]
}
期望输出:

{
"records": [
{
"value": [
[ ------->bracket wrapping timestamp
{
"TIMESTAMP": "January 03 2017 09:46:15",
"ID": "sampleID"
}
] ------->bracket wrapping timestamp
,
[ ------->bracket wrapping books 
{
"Title": "Book2",
"Artist": "artist1"
},
{
"Title": "Book1"
"Artist": "artist1"
"Notes": "testtest"
}
] ------->bracket wrapping books 
] 
}
]
}
编辑:可能过于简化,但图书部分有20多个字段。每个json字符串只有一个时间戳,但每个请求可以有100到1000本书


edit2:标题/主要问题的澄清。

据我所知,您只需为所有记录添加另一个数组:

JObject jsonobject = new JObject();
JObject jsonobject2 = new JObject();
dynamic topObject = jsonobject;
topObject.records = new JArray() as dynamic;
dynamic midObject = jsonobject2;
midObject.value = new JArray() as dynamic;
dynamic arrayrecord = new JArray();
dynamic record = new JObject();
record.TIMESTAMP = DateTime.Now.ToString("MMMM dd yyyy HH:mm:ss");
record.ID = "sampleid";
arrayrecord.Add(record);
midObject.value.Add(arrayrecord);
//query for data
//loop through query
// add to record when data found ex:record.author=dr[0].ToString();
// midObject.value.Add(record);
// finished add data from query
topObject.records.Add(midObject);

string jsonstr = topObject.ToString();

对DTO类使用对象解析器。您正在创建的代码非常不可维护。您希望在时间戳对象上使用的方括号表示集合/数组。将类型更改为集合(List/Array[]/IEnumerable)可能会获得所需的JSON格式,但会改变对象的内部工作方式。括号表示集合中的数组。除非您的时间戳和账簿可能会多次出现,否则为了维护如@DanielCarbajalLópez所述的可维护性,请远离此项。至于排除空元素,您可以使用类中的选项忽略要从序列化中排除的
null
属性。@Gigabyte Timestamp仅在最顶端显示一次。书籍可以在同一个json字符串中包含数百个/数千个条目。我不想用括号来分隔时间戳和书籍,但它们是项目需求的一部分。你的解决方案成功了。编辑:以为有语法错误。错误是什么?该代码在LinqPad中工作并产生正确的输出。哦,没关系