如何将JsonResult对象转换为JObject并修改其属性?
JsonResult转JObject并修改属性的解决方案
方案一:直接从JsonResult对象转换(最优)
JsonResult本身携带了原始的数据源对象(即你传入Json()方法的匿名对象),无需处理非标准字符串,直接通过Value属性获取后转换为JObject是最可靠高效的方式:
// 假设已获取到JsonResult实例,命名为jsonResultObj JObject jObject = JObject.FromObject(jsonResultObj.Value); // 修改属性示例 jObject["price"] = "$30.00"; jObject["stockAvailability"] = "In Stock"; // 修改数组类型属性 jObject["enabledattributemappingids"] = JArray.FromObject(new int[] { 5, 6 });
说明
- 该方案依赖Newtonsoft.Json(Json.NET),ASP.NET项目通常默认已引用,若未引用可通过NuGet安装
Newtonsoft.Json包 - 直接操作原始对象,完全避免了非标准字符串解析的风险,是优先推荐的方案
方案二:处理非标准字符串(仅当无法获取JsonResult实例时使用)
如果只能拿到你提供的非标准字符串,需要先将其转换为合法JSON,再解析为JObject:
string invalidJson = "{ productId = 1, gtin = null, mpn = null, sku = null, price = \"$25.00\", basepricepangv = null, stockAvailability = \"\", enabledattributemappingids = {int[0]}, disabledattributemappingids = {int[0]} }"; // 正则替换:给属性名加双引号,将=替换为: string validJson = Regex.Replace(invalidJson, @"(\w+)\s*=", "\"$1\":"); // 替换{int[0]}这类数组占位符为合法JSON数组[] validJson = Regex.Replace(validJson, @"\{int\[\d+\]\}", "[]"); // 解析为JObject并修改属性 JObject jObject = JObject.Parse(validJson); jObject["message"] = JArray.FromObject(new string[] { "属性已更新" });
说明
- 正则替换仅针对你提供的字符串格式适配,若字符串格式有其他变化(比如嵌套对象),需要调整正则规则
- 此方案属于退而求其次的选择,存在格式适配不全的风险
内容的提问来源于stack exchange,提问作者Wasyster
相关产品推荐
相关产品推荐

