【发布时间】:2021-12-18 22:23:01
【问题描述】:
我正在尝试将 JArray 的元素添加到 C# 中的 JObject 中。我有 Java 中的解决方案,但无法弄清楚如何在 C# 中做同样的事情。这是我的 Java 代码:
public static JSONObject[] fetchData(String dataFile, String arrayName) {
JSONArray jsonArray;
try {
jsonArray = extractObject_JSON(dataFile).getJSONArray(arrayName);
} catch (Exception e) {
// If Method Name is not matching with arrayName, then default will be taken
jsonArray = extractObject_JSON(dataFile).getJSONArray("default");
}
JSONObject[] jsonObject = new JSONObject[jsonArray.length()];
for (int i = 0; i < jsonArray.length(); i++) {
jsonObject[i] = jsonArray.getJSONObject(i);
}
return jsonObject;
}
这是我的 C# 代码:
public static JObject FetchData(string testMethodName)
{
using (StreamReader r = new StreamReader("PathToFile"))
{
string jsonstring = r.ReadToEnd();
JObject obj = JObject.Parse(jsonstring);
JArray jsonArray = JArray.Parse(obj[testMethodName].ToString());
JObject jObject = new JObject();
for (int i = 0; i < jsonArray.Count; i++)
{
jObject[i] = jsonArray[i];
}
return jObject;
}
}
jsonArray 在此代码示例中返回:
{[
{
"loginId": "testuser1",
"userCase": "verify for user"
},
{
"loginId": "testuser2",
"userCase": "verify for user"
}
]}
testMethodName 将是 LoginTest_E2E(请参阅下面的 .json 输入文件)
{
"LoginTest_E2E": [
{
"loginId": "testuser1",
"userCase": "verify for user"
},
{
"loginId": "testuser2",
"userCase": "verify for user"
}
]
}
当我运行我的 C# 代码时,我收到以下错误:
System.ArgumentException: '使用无效键值设置 JObject 值:0。预期对象属性名称。'
我希望 fetchData 方法返回 JObject 的:
{
"loginId": "testuser1",
"userCase": "verify for user"
},
{
"loginId": "testuser2",
"userCase": "verify for user"
}
有人知道如何用 C# 解决这个问题吗?
【问题讨论】:
-
我注意到您在两个小时前问过very similar looking question,但没有得到答复。这篇文章有根本的不同吗?
-
我认为您期望的最终结果不是有效的 JSON。数组有索引,对象有属性。考虑到你有这个结果,你将如何访问第一个元素?您不能使用索引,因为它不是数组,也没有属性名称。也许如果您分享您想要这样做的实际原因,您可能会得到更有用的答案。
-
同样在 Java 代码中你有一个 JsonObjects 数组,在 C# 代码中你只有一个 JObject 实例。
-
感谢@SelmanGenç 我认为这是我想在 C# 中复制 Java 代码的地方。你知道我将如何在我的 C# 示例中创建一个 jsonObjects 数组吗?
-
@SelmanGenç 这个 fetchData 方法将用于为数据驱动的 NUnit 测试获取数据
标签: c# arrays json .net json.net