c#API"解析值时遇到意外的字符:S。路径'',第0行,第0位和第34位;

时间:2016-07-08 09:34:14

标签: c# api parsing anonymous webinvoke

我在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/jsoncontentType,有效JSON在正文中(在另一个有关stackoverflow的讨论中找到的网站上进行了验证)

非常感谢你的帮助

见到你

1 个答案:

答案 0 :(得分:1)

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

如果您对某个对象发送ToString(),则可能是Json格式。

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

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

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