【发布时间】:2021-02-14 19:23:36
【问题描述】:
我从邮递员那里发送了一个请求,它访问了后端的 API。 该方法的返回类型是 JObject 。 我正在使用 JObject.Parse 方法解析字符串。 结果是得到一个空数组。 注意:对 newtonsoft(到版本 10)的更新是 haapend。
// GET /test/custom
[System.Web.Http.ActionName("custom")]
public JObject GetCustom(int Id)
{
try
{
string json = @"{
CPU: 'Intel',
Drives: [
'DVD read/writer',
'500 gigabyte hard drive'
]
}";
JObject rtn = JObject.Parse(json);
return rtn;
}
}
catch (Exception ex)
{
return new JObject();
}
}
此方法返回一个 JObject,但邮递员的响应显示一个空数组。 postman response
我还在 GetCustom 方法中尝试了以下代码,但这些代码也返回空。
案例:1
dynamic resultObject = new ExpandoObject();
resultObject.somefield = "somevalue";
resultObject.someotherfield = 1995;
return Json(new { status = "success", result = resultObject });
案例:2
var jObject = new JObject();
jObject.Add("someField", "someValue");
jObject.Add("otherField", 1995);
var newObj = new { status = "success", result = jObject };
var returnThis = JsonConvert.SerializeObject(newObj);
var root = JObject.FromObject(new { sectionData = returnThis });
return root;
案例:3
var cycleJson = JObject.Parse(@"{""name"":""john""}");
//add surname
cycleJson["surname"] = "doe";
//add a complex object
cycleJson["complexObj"] = JObject.FromObject(new { id = 1, name = "test" });
return cycleJson;
案例:4
var json = @"{
CPU: 'Intel',
Drives: [
'DVD read/writer',
'500 gigabyte hard drive'
]
}";
var o = (JObject)JToken.FromObject(json);
return o;
我正在尝试将第三方 API 返回的对象序列化为 JSON。我无法控制第三方 API 或其返回的对象。
【问题讨论】:
-
这是无效的 json。 JSON 标准需要双引号
-
@TheGeneral 似乎 Json.Net 对此很好:dotnetfiddle.net/izehx8
-
它似乎在 jsfiddile dotnetfiddle.net/Wf2O1G 中工作,但我的邮递员没有得到结果。我错过了什么吗?@Eugene
-
newtonsoft 升级是否会导致此问题?请帮助@TheGeneral
-
看起来您可能正在使用 ASP.NET MVC 4 或 5,对吗?如果是这样,您的问题可能与JSON Objects are serialized to empty brackets when returned using JsonResult 重复。