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实现:
- 定义实体类:
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; } }
- 异步生成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
相关产品推荐
相关产品推荐

