【发布时间】:2016-08-24 10:07:58
【问题描述】:
我有一个如下所示的 .json 文件:
[
{
"username": "John",
"currency": 8,
"pulls":
[
{
"character": "person"
},
{
"character": "loved one"
}
]
},
{
"username": "Mike",
"currency": 2,
"pulls":
[
{
"character": "noone"
}
]
},
{
"username": "Clara",
"currency": 5,
"pulls":
[
{
"character": "someone"
}
]
}
]
到目前为止我设法做的是修改“货币”:
bool userExists = false;
string jsonPointsString = File.ReadAllText(userPath);
dynamic jsonObjects = JsonConvert.DeserializeObject(jsonPointsString);
foreach (var jsonObject in jsonObjects)
{
if (jsonObject["username"] == user)
{
jsonObject["currency"] += value;
string output = JsonConvert.SerializeObject(jsonObjects, Formatting.Indented);
File.WriteAllText(userPath, output);
userExists = true;
}
}
以及从头开始添加一个全新的条目:
JsonCollection.User user = new JsonCollection.User();
user.username = username;
user.currency = 10;
using (StreamReader r = new StreamReader(userPath))
{
string json = r.ReadToEnd();
List<JsonCollection.User> users = JsonConvert.DeserializeObject<List<JsonCollection.User>>(json);
users.Add(user);
newJson = JsonConvert.SerializeObject(users, Formatting.Indented);
}
File.WriteAllText(userPath, newJson);
但是,无论我尝试什么,我都无法向“拉动”添加另一个元素。这个想法是我用一个用户名和一个拉取两个字符串来调用一个函数。基于用户名变量,我必须找到相应的 Json 条目并根据拉变量在“拉”树中创建一个新条目。这是我能想到的:
public void AddPullToUser(string user, string newPull)
{
user = "Mike"; //test value
string jsonPointsString = File.ReadAllText(userPath);
dynamic jsonObjects = JsonConvert.DeserializeObject(jsonPointsString);
foreach (var jsonObject in jsonObjects)
{
if (jsonObject["username"] == user)
{
//jsonObject["pulls"] = newPull;
JsonCollection.Character pull = new JsonCollection.Character();
pull.character = newPull;
jsonObject["pulls"] = pull;
string output = JsonConvert.SerializeObject(jsonObjects, Formatting.Indented);
File.WriteAllText(userPath, output);
}
}
}
如果我这样做,系统将无法将 JsonCollection 转换为 JArray 但不使用 JArray 我不明白如何找到特定的用户树。 在第二步中,这必须进一步扩展,以免产生重复的“拉动”,但首先这必须正常工作。
任何帮助将不胜感激。
【问题讨论】:
-
您可以将
json反序列化为强类型C#对象,然后修改您想要的条目。我认为这会更容易。 -
查看link