我在c#中使用了多个编码良好的API。我想使用一个接收匿名对象的人(我不想创建一个类)。我尝试反序列化对象时遇到问题。
我有一个遵循此方案的API,当使用python
函数从json_dumps
调用它时效果很好。但是当我尝试使用JSON.stringify
时(来自一个甚至是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。路径&#39;&#39;,第0行,位置0
这很正常,因为objectSentByUser.toString()
返回&#34; System.Object&#34;
(但是为什么它与python json_dump一起使用时会起作用?)
当使用python函数json_dump调用此代码时,该代码将返回如下对象:
&#34; {\\&#34; KEY1 \\&#34;:\\&#34; VALUE1 \\&#34;,...}&#34;
从Postman发送一个经典的POST,其中application/json
为contentType
,有效JSON
在正文中(在另一个有关stackoverflow的讨论中找到的网站上进行了验证)
非常感谢你的帮助
见到你
答案 0 :(得分:1)
如果用户向您的操作发送了有效的json字符串,则不要接受对象作为参数,而是接受字符串(即因为您的用户向您发送了一个字符串)。
如果您对某个对象发送ToString()
,则可能是Json
格式。
尝试接受字符串并反序列化:
[WebInvoke(Method = "POST", UriTemplate = "myUrl")]
[OperationContract]
public Message myMethod(string jsonSentByUser)
{
var perso = JsonConvert.DeserializeObject<dynamic>(jsonSentByUser);