【问题标题】:Passing JSON as part of an object to .net core API将 JSON 作为对象的一部分传递给 .net 核心 API
【发布时间】: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 字符串是有效的,如下所示。

【问题讨论】:

  • dynamicDictionary&lt;&gt; 用于该属性,或将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


【解决方案1】:

我会为此使用 JsonElement:

public class BURequest
{       
    public Guid  ID { get; set; }
    public JsonElement JSONStr { get; set; }  --->JSON passed in as string
    public string VersionName { get; set; }
}

然后只需获取值:

testRequest.JSONStr.ToString() 

Json 必须是:

{
    "JSONStr" : {
      "content_version": "1",
      "date_created": "2020-10-06T13:52:15.288Z",
      "date_updated": "2020-10-06T13:54:24.325Z",
      "tools": {
        "car": true,
        "truck": true
      }
   }
}

【讨论】:

  • 谢谢!我试过了,但请求的验证器抱怨 JSONStr 为空。
  • 我编辑了答案以显示 Json 的外观。
【解决方案2】:

只需添加一个答案即可对问题发表评论。将JSONStr 属性的类型从string 更改为JObject 即可解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多