0

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

我有一个遵循此方案的 API,它在python使用该json_dumps函数调用时运行良好。但是当我尝试使用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. Path '', line 0, position 0 这很正常,因为objectSentByUser.toString()返回“System.Object”(但是为什么使用时它会起作用用python json_dump?)

此代码在使用返回如下对象的 python 函数 json_dump 调用时有效:

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

从 Postman 我发送了一个经典的 POST,正文中包含application/jsonascontentType和 valid JSON(在关于 stackoverflow 的另一个讨论中找到的网站上验证)

非常感谢你的帮助

再见

4

1 回答 1

1

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

如果你调用ToString()一个对象,很可能它不是Json格式。

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

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

    var perso = JsonConvert.DeserializeObject<dynamic>(jsonSentByUser);
于 2016-07-08T09:39:45.237 回答