使用 .NET C#,我試圖從 JArray 創建一個新的 JObject。我有一個 FetchData JObject,我想為資料驅動測驗回傳一個 JObject 資料。這是我到目前為止所擁有的:
public static JObject FetchData(string testMethodName)
{
using (StreamReader r = new StreamReader("PathToJsonfile"))
{
string jsonstring = r.ReadToEnd();
JObject obj = JObject.Parse(jsonstring);
JArray jsonArray = JArray.Parse(obj[testMethodName].ToString());
JObject jObject = new JObject(new JProperty("test",jsonArray));
return jObject;
}
}
我想回傳與正在運行的 testMethod 相關的測驗資料的 JObject。當我運行此代碼時,jObject 回傳:
"test": [
{
"loginId": "testuser1",
"userCase": "verify for user"
},
{
"loginId": "testuser2",
"userCase": "verify for user"
}
]
我的問題是我只想在 JObject 中回傳以下陣列:
{"loginId":"testuser1","userCase":"verify for user"}
我已經研究了一段時間,如果不向新的 JObject 添加一個鍵就找不到解決方案,在這種情況下,鍵是“測驗”。
這在 C# 中甚至可能嗎?
我還嘗試將 JArray 直接添加到 JObject:
JObject jObject = new JObject(new JObject(jsonArray));
但得到錯誤: System.ArgumentException: '不能將 Newtonsoft.Json.Linq.JArray 添加到 Newtonsoft.json.Linq.JObject
我還嘗試將陣列添加到 JObject 中,如下所示:
for (int i = 0; i < jsonArray.Count; i )
{
jObject[i] = jsonArray[i];
}
but get error : System.ArgumentException : Set JObject values with invalid key value: 0. Object property name expected.
fwiw this is how I am doing this is Java and it works like a charm, but I cannot figure it out in C#. Java Code:
JSONObject[] jsonObject = new JSONObject[jsonArray.length()];
for (int i = 0; i < jsonArray.length(); i ) {
jsonObject[i] = jsonArray.getJSONObject(i);
}
uj5u.com熱心網友回復:
要獲取陣列的第一個元素,您可以執行以下操作:
var json = @"{
""test"": [
{
""loginId"": ""testuser1"",
""userCase"": ""verify for user""
},
{
""loginId"": ""testuser2"",
""userCase"": ""verify for user""
}]
}";
var testMethodName = "test";
var jObject = JObject.Parse(json);
var first = (JObject)jObject[testMethodName][0]; // note that this can throw for multiple reasons
你的java代碼的模擬是:
// parse jObject as earlier
var jArr = (JArray)jObject[testMethodName];
var jsonObjectArr = new JObject[jArr.Count];
for (int i = 0; i < jArr.Count; i )
{
jsonObjectArr[i] = (JObject)jArr[i];
}
或者您可以使用LINQ to JSON:
// parse jObject as earlier
var jsonObjectArr = jObject[testMethodName]
.Children<JObject>()
.ToArray();
uj5u.com熱心網友回復:
為什么不像這樣只回傳陣列的第一個物件:
public static JToken FetchOneDatum(string testMethodName)
{
string jsonString = GetFileContent("sampleTest.txt");
JObject obj = JObject.Parse(jsonString);
JArray jsonArray = JArray.Parse(obj[testMethodName].ToString());
return jsonArray[0];
}
您可以在此處找到整個 Visual Studio 解決方案: GitHub 上的解決方案
uj5u.com熱心網友回復:
C# 方法;)
public class Test
{
public string loginId { get; set; }
public string userCase { get; set; }
}
public class Scenario
{
public Test[] tests { get; set; }
}
// Usage
public static Test FetchData(string testMethodName)
{
using (var reader = new StreamReader("PathToJsonfile"))
{
var json = reader.ReadToEnd();
var scenario = JsonConvert.DeserializeObject<Scenario>(json);
return scenario.tests.First();
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/349097.html
