C#中如何将JArray元素添加到JObject,解决索引作为属性名报错问题
错误原因
- 方法返回类型不匹配:你的Java实现返回的是
JSONObject数组,对应C#中Newtonsoft.Json的类型应该是JObject[]或JArray,你定义的返回值为单个JObject,本身就无法承载你预期的多对象数组结构。 - JObject属性键类型错误:JObject是标准的JSON对象结构,属性必须是字符串类型的键,你直接用int类型的索引
i作为键赋值,就会触发Object property name expected的异常。就算你把索引转成字符串当键,得到的结构会是{"0": {...}, "1": {...}},也不符合你预期的数组返回格式。 - JArray取值逻辑冗余:
obj[testMethodName]本身就已经是JArray类型,不需要转成字符串再重新Parse,既降低性能也可能引发额外的序列化异常。
修正后的实现代码
和你的Java逻辑完全对齐,支持找不到对应数组名时回退到default数组:
using Newtonsoft.Json.Linq; using System.IO; using System.Linq; public static JObject[] FetchData(string testMethodName, string dataFilePath = "PathToFile") { // 读取并解析JSON文件 string jsonString = File.ReadAllText(dataFilePath); JObject rootObj = JObject.Parse(jsonString); JArray targetArray; try { // 直接强转获取对应数组,避免重复序列化 targetArray = (JArray)rootObj[testMethodName]; } catch { // 找不到对应数组时回退到default数组 targetArray = (JArray)rootObj["default"]; } // 将JArray转为JObject数组返回 return targetArray.Select(item => (JObject)item).ToArray(); }
如果需要返回JArray类型,直接返回targetArray即可,不需要转成数组。
验证返回结果
调用FetchData("LoginTest_E2E")得到的返回值序列化后就是你预期的结构:
[ { "loginId": "testuser1", "userCase": "verify for user" }, { "loginId": "testuser2", "userCase": "verify for user" } ]
内容的提问来源于stack exchange,提问作者apg3253
相关产品推荐
相关产品推荐

