我已经尝试了无数次,还尝试查阅Newtonsoft网站提供的文档,但是关于我的问题似乎没有任何答案。我还搜索了Google无济于事,浪费了大约4个小时,没有答案,只是继续没有它。
我的问题是无法通过键将JObject添加到JArray中。我知道这似乎很简单,但是我尝试做的所有事情最终导致抛出异常。
我正在尝试编写具有以下布局的简单文件:
{
"items" : [
"item 1" : { },
"item 2" : { },
]
}
// the actual layout that I have is
{
"items" : [
{ },
{ },
]
}
我可以通过items
为JArray成功添加第一个jobj["items"] = jarray
键,但是我似乎无法对JArray使用相同的技术。我需要通过JArray.Add()在JArray中添加项目,但不允许我提供密钥。我真的迷失了。有人可以解释一下如何实现上述布局吗?谢谢。
答案 0 :(得分:0)
正如评论中建议的那样,我想要的布局不是正确的布局。看起来json需要数组中的一个匿名对象来保存键对象。
因此布局应为:
{
"items" : [
{
"item1" : { }
},
.......
]
}
答案 1 :(得分:0)
如@dbc所述,您要求的格式无效。您可以实现的最接近的有效格式如下。
{
"items":
{
"item 1":{},
"item 2":{}
}
}
您可以使用包含Dictionary的Data结构来实现。例如
var data = new DataStructure{
items = new Dictionary<string,Item>()
{
["Item 1"] = new Item{},
["Item 2"] = new Item{}
}};
其中DataStructure和Item定义为
public class DataStructure
{
public Dictionary<string,Item> items{get;set;}
}
public class Item
{
}
如果您不想创建具体的类,则可以使用匿名类型实现相同的目的
var data = new {items = new Dictionary<string,Item>()
{
["Item 1"] = new Item{},
["Item 2"] = new Item{}
}};
或者,如果您也想避免创建Item Class
var data = new {items = new Dictionary<string,object>()
{
["Item 1"] = new {},
["Item 2"] = new {}
}};
输出
{
"items": {
"Item 1": {},
"Item 2": {}
}
}