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

C#中如何不新增键名直接将JArray内容存入JObject?

解决方案

首先明确两个基础认知:

  • JObject 本质是JSON键值对对象,只接受字符串类型的属性名作为键,本身无法直接存储无键的数组结构
  • 你Java代码返回的是JSONObject数组,对应C#中的JArray或者IEnumerable<JObject>,如果坚持返回单个JObject,只能取数组中指定下标的对象

方案1:返回数组中单个JObject(匹配你给出的期望返回结果)

如果你只需要返回数组中的某一个对象(比如示例中的第一个元素),直接从JArray中按索引取出对应元素即可,无需额外新建JObject包装:

public static JObject FetchData(string testMethodName)
{
    using (StreamReader r = new StreamReader("PathToJsonfile"))
    {
        string jsonstring = r.ReadToEnd();
        JObject obj = JObject.Parse(jsonstring);
        // 无需ToString再Parse,直接类型转换即可,减少性能损耗
        JArray jsonArray = obj[testMethodName] as JArray;
        // 直接返回对应下标的JObject,此处取第一个元素
        return jsonArray[0] as JObject;
    }
}

返回结果完全匹配你期望的结构:

{"loginId":"testuser1","userCase":"verify for user"}

方案2:返回所有JObject集合(匹配你的Java代码逻辑)

如果需要和Java实现一样返回数组中所有的JSONObject,修改方法返回值为JArray即可:

public static JArray FetchData(string testMethodName)
{
    using (StreamReader r = new StreamReader("PathToJsonfile"))
    {
        string jsonstring = r.ReadToEnd();
        JObject obj = JObject.Parse(jsonstring);
        return obj[testMethodName] as JArray;
    }
}

如果需要强类型的JObject集合,也可以返回IEnumerable<JObject>:

public static IEnumerable<JObject> FetchData(string testMethodName)
{
    using (StreamReader r = new StreamReader("PathToJsonfile"))
    {
        string jsonstring = r.ReadToEnd();
        JObject obj = JObject.Parse(jsonstring);
        JArray jsonArray = obj[testMethodName] as JArray;
        return jsonArray.Values<JObject>();
    }
}

报错原因说明

  • 第一个报错:你尝试将JArray类型直接传入JObject构造函数,JObject只能接收JProperty(键值对)类型的内容,无法直接存储数组
  • 第二个报错:JObject的索引器仅支持字符串类型的属性名作为参数,传入数字索引会被识别为属性名,不符合JObject的结构要求

内容的提问来源于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:36:03