我有一个看起来像这样的现有json文件:
{
"players": [],
"games": []
}
我想将对象添加到players
数组中,使其看起来像这样:
{
"players": [
{
"name": "Peter",
"checksum": "6fa95b1427af77b3d769ae9cb853382f"
},
{
"name": "John",
"checksum": "61409aa1fd47d4a5332de23cbf59a36f"
},
{
"name": "Bob",
"checksum": "2fc1c0beb992cd7096975cfebf9d5c3b"
}
],
"games": []
}
播放器存储在全局Dictionary<string, string>
中。但是在我的实现中,字典中的下一个元素会覆盖第一个写入的元素,因此当循环在John
时,下一个元素将是Bob
,然后Peter
被{{1 }}。结果如下:
Bob
这是我的代码:
{
"players": [
{
"name": "Bob",
"checksum": "2fc1c0beb992cd7096975cfebf9d5c3b"
},
{
"name": "John",
"checksum": "61409aa1fd47d4a5332de23cbf59a36f"
},
{
"name": "Bob",
"checksum": "2fc1c0beb992cd7096975cfebf9d5c3b"
}
],
"games": []
}
答案 0 :(得分:0)
(与此类似的问题已经问了好几次了,但是我找不到重复的,所以我认为值得回答。)
您要创建一个单个 JObject
实例,然后在循环中对其进行多次修改。每次迭代将覆盖前一次迭代中的数据集。您的JArray
最后带有对同一JObject
的引用。
相反,您需要为字典中的每个条目创建一个新的JObject
。为此,您只需要将newPlayerEntry
的声明移入循环:
var sortedDict = PlayerChecksumDict.OrderBy(x => x.Key);
foreach (var item in sortedDict)
{
JObject newPlayerEntry = new JObject();
newPlayerEntry["name"] = item.Key;
newPlayerEntry["checksum"] = item.Value;
jsonPlayerArray.Add(newPlayerEntry);
}
现在JArray
中的每个元素都将引用不同的JObject
。