You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 23:57:00