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

C#如何为JObject传递字符串变量?遇System.Text.Json加载异常

解决方案:动态赋值JObject并支持异步任务

方式一:直接修改JObject属性(基于现有代码改造)

既然你已经在使用Newtonsoft.Json的JObject,直接通过路径访问并修改属性值即可,完全不需要依赖System.Text.Json,规避程序集加载错误。

以下是带动态参数的异步实现代码:

using Newtonsoft.Json.Linq;
using System.Threading.Tasks;

public async Task<JObject> GenerateDynamicJson(string accountLink, string accountNumber, string bookingStart, string bookingEnd)
{
    // 先解析基础JSON结构
    JObject json = JObject.Parse(@"{
        RequestData: {
          AccountCredential: {
            AccountLink: ''
          },
          AccountNumber: '',
          BookingDateStart: '',
          BookingDateEnd: ''
        }  
    }");

    // 动态赋值各个字段
    json["RequestData"]["AccountCredential"]["AccountLink"] = accountLink;
    json["RequestData"]["AccountNumber"] = accountNumber;
    json["RequestData"]["BookingDateStart"] = bookingStart;
    json["RequestData"]["BookingDateEnd"] = bookingEnd;

    // 这里可以添加异步操作,比如将JSON发送到API等
    await SomeAsyncOperation(json);

    return json;
}

// 示例异步操作方法
private async Task SomeAsyncOperation(JObject json)
{
    // 模拟异步任务,比如HTTP请求、文件写入等
    await Task.Delay(100);
}

方式二:通过实体类序列化生成JObject(更规范)

如果JSON结构固定,定义对应的实体类后序列化,代码可读性和可维护性更好,同样基于Newtonsoft.Json实现:

  1. 定义实体类:
public class RequestData
{
    public AccountCredential AccountCredential { get; set; }
    public string AccountNumber { get; set; }
    public string BookingDateStart { get; set; }
    public string BookingDateEnd { get; set; }
}

public class AccountCredential
{
    public string AccountLink { get; set; }
}

public class RootObject
{
    public RequestData RequestData { get; set; }
}
  1. 异步生成JObject的代码:
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Threading.Tasks;

public async Task<JObject> GenerateDynamicJsonFromEntity(string accountLink, string accountNumber, string bookingStart, string bookingEnd)
{
    // 实例化实体并赋值
    var root = new RootObject
    {
        RequestData = new RequestData
        {
            AccountCredential = new AccountCredential { AccountLink = accountLink },
            AccountNumber = accountNumber,
            BookingDateStart = bookingStart,
            BookingDateEnd = bookingEnd
        }
    };

    // 序列化为JObject
    JObject json = JObject.FromObject(root);

    // 执行异步操作
    await SomeAsyncOperation(json);

    return json;
}

关键说明

  • 之所以不用System.Text.Json,是因为你当前环境可能缺少该程序集的引用,而你已经在使用Newtonsoft.Json(JObject是它的核心类型),直接沿用这套框架可以避免程序集加载错误。
  • 两种方式都支持异步任务,只需在方法中添加async/await关键字,包裹异步操作逻辑即可。

内容的提问来源于stack exchange,提问作者Carmen Cisterna Chamblas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 13:15:10