“解析值时遇到意外字符:S.Path '',第 0 行,位置 0”

问题描述 投票:0回答:1

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

我有一个遵循此方案的 API,当使用

python
函数从
json_dumps
调用它时,效果很好。但是当我尝试使用
JSON.stringify
(来自 a 甚至邮递员)时,我收到了 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.Path '',第 0 行,位置 0

    这是很正常的,因为

    objectSentByUser.toString()
    返回“System.Object”。但是为什么它与 python json_dump 一起使用时可以工作呢?

当使用返回如下对象的 python 函数 json_dump 调用此代码时,该代码可以工作:

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

我从 Postman 发送了一个经典的 POST,其中

application/json
contentType
,正文中的
JSON
有效。

c# json parsing anonymous webinvoke
1个回答
1
投票

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

如果您对某个对象调用

ToString()
,它很可能不是
Json
格式。

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

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

    var perso = JsonConvert.DeserializeObject<dynamic>(jsonSentByUser);
© www.soinside.com 2019 - 2024. All rights reserved.