【发布时间】:2021-01-21 12:35:42
【问题描述】:
我正在处理的 API 需要将一个非常复杂的 JSON 对象作为字符串以及其他值传入。所以我创建了一个这样的类:
public class BURequest
{
public Guid ID { get; set; }
public string JSONStr { get; set; } --->JSON passed in as string
public string VersionName { get; set; }
}
API 控制器有以下方法:
public async Task<IActionResult> Check ([FromBody] BURequest testRequest)
但我一直收到“解析值后遇到意外字符:c. 路径 'BURequest',第 4 行,第 3 位。”
这是 JSON 字符串:
{
"content_version": "1",
"date_created": "2020-10-06T13:52:15.288Z",
"date_updated": "2020-10-06T13:54:24.325Z",
"tools": {
"car": true,
"truck": true
}
}
有什么方法可以解决这个问题,而不必为 JSON 对象本身创建一个类?它是一个复杂的对象,具有大量的属性。谢谢!
p.s.我已经使用 JSONLint 验证了 JSON 字符串是有效的,如下所示。
【问题讨论】:
-
将
dynamic或Dictionary<>用于该属性,或将dynamic用于请求类型 -
谢谢!但是,如果我对属性或请求使用动态,我会收到相同的错误消息(即遇到意外的字符)。如果我对属性使用字典,则会出现“错误转换值 \"{\" 以键入 'System.Collections.Generic.Dictionary`2[System.String,System.String]'。
-
您可以将整个请求正文插入jsonlint.com 之类的工具中,以确定问题出在序列化还是反序列化上,并将该信息包含在问题中。还可以尝试将 JSONStr 从字符串更改为 JObject。
-
如果这些都不起作用,您可能需要在发出请求之前转义所有 json 特殊字符。
-
感谢@Connell.O'Donnell。我尝试使用 JObject 并且成功了!
标签: c# asp.net json asp.net-mvc asp.net-core