c#API"Unexpected character encountered while parsing value: S. Path '', line 0, position 0"

c# API "Unexpected character encountered while parsing value: S. Path '', line 0, position 0"

我使用多个 API 用 c# 编码的,效果很好。我想使用一个接收匿名对象的方法(我不想创建 Class)。当我尝试反序列化对象时遇到问题。

我有一个遵循此方案的 API,当使用 json_dumps 函数从 python 调用它时效果很好。但是当我尝试使用 JSON.stringify(来自 a 甚至 POSTMAN 时,我有一个 400 错误的请求。

这是我的代码,我尝试了很多东西:

[WebInvoke(Method = "POST", UriTemplate = "myUrl")]
[OperationContract]
public Message myMethod(object objectSentByUser)
{

    var perso = JsonConvert.DeserializeObject<dynamic>(objectSentByUser.ToString());

JsonConvert.DeserializeObject<dynamic>等一个字符串,我试过:

-将objectSentByUser指定为myMethod参数中的字符串 当我这样做时,我什至没有输入方法就得到了 400(我尝试发送 JSON、添加引号、发送字符串等...)

-用(string)objectSentByUser投射,它不起作用

——使用toString()方法,导致下一个错误: 解析值时遇到意外字符:S.路径“”,第 0 行,位置 0 这很正常,因为 objectSentByUser.toString() returns "System.Object" (但为什么它与 python json_dump 一起使用时有效?)

此代码在使用 python 函数 json_dump 调用时有效,returns 对象如下:

"{\\"key1\":\\"value1\",...}"

我从 Postman 发送了一个经典的 POST,application/jsoncontentType,正文中有一个有效的 JSON(在另一个讨论中找到的网站上验证过计算器)

非常感谢您的帮助

再见

如果用户向您的操作发送了有效的 json 字符串,则不要接受对象作为参数,而是接受字符串(即因为您的用户向您发送了一个)。

如果您在对象上调用 ToString(),很可能它不是 Json 格式。

尝试接受一个字符串并将其反序列化:

[WebInvoke(Method = "POST", UriTemplate = "myUrl")]
[OperationContract]
public Message myMethod(string jsonSentByUser)
{

    var perso = JsonConvert.DeserializeObject<dynamic>(jsonSentByUser);