我正在嘗試將 a 的元素添加JArray到JObjectC# 中的a中。我有 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# 中解決這個問題?
uj5u.com熱心網友回復:
正如您所寫的那樣,jObject 期望您添加到它的屬性的鍵的字串值。至少從 JObject 擴展 IDictionary<string, JToken> 的事實來看,這是我的理解:https ://www.newtonsoft.com/json/help/html/t_newtonsoft_json_linq_jobject.htm
你試圖給它一個整數值作為鍵。從您的 Java 代碼來看,您似乎打算宣告一個 JObject 陣列,但您只是在此處宣告了一個:
JObject jObject = new JObject();
如果是這種情況,請按照@Selman 所說將其更改為 JObject[]。
uj5u.com熱心網友回復:
有兩種不同的型別 JArray 和 JObject。您不能只將陣列作為 JObject 回傳。您可以回傳或 JArray 或 JObject[]。不要混淆。JObject[] 不是 Json 陣列,它是 Json 物件的 C# 陣列。
public static JObject[] FetchData(string testMethodName, string pathToFile)
{
string json = string.Empty;
using (StreamReader r = new StreamReader(@pathToFile))
json = r.ReadToEnd();
JObject obj = JObject.Parse(json);
JArray jsonArray = JArray.Parse(obj[testMethodName].ToString());
JObject[] jObjects = new JObject[jsonArray.Count];
for (int i = 0; i < jsonArray.Count; i )
jObjects[i] = JObject.Parse(jsonArray[i].ToString());
return jObjects;
}
或使用 linq
public static JObject[] FetchData(string testMethodName, string filePath)
{
string json = string.Empty;
using (StreamReader r = new StreamReader(@fileToPath))
json = r.ReadToEnd();
JObject obj = JObject.Parse(json);
var ja= JArray.Parse( obj[testMethodName].ToString() );
return ja.Select(j => JObject.Parse(j.ToString()) ).ToArray();
}
輸出
[
{
"loginId": "testuser1",
"userCase": "verify for user"
},
{
"loginId": "testuser2",
"userCase": "verify for user"
}
]
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/348134.html
