有效的JSON字符串抛出遇到意外的字符错误

时间:2017-03-28 13:28:10

标签: c# json angular websocket asp.net-core

我试图将angular2客户端连接到C#ASP.net核心服务器。当我使用websockets从客户端向服务器发送JSON字符串时,出现错误:

Unexpected character encountered while parsing value: {. Path 'Argument', line 1, position 39.

JSON字符串如下(错误似乎来自&#34之后的左括号;参数:"):

{
  "MethodName": "CreateUser",
  "Argument": { 
    "User": {
      "Attributes": [{
        "Name": "age",
        "Value": "30",
        "Type": 0
      }],
      "Email": "test@mail.com",
      "Name": "Test Name"
    },
    "Password": "1234"
  }
}

抛出错误的代码在这里:

public string Receive(string input)
    {
        try
        {
            Debug.WriteLine(input);
            InstructionServer jsonObject = JsonConvert.DeserializeObject<InstructionServer>(input); // This fails
            string methodName = jsonObject.MethodName;
            string data = jsonObject.Argument;
            return methods[methodName](1, data, "", "");
        }
        catch (Exception e)
        {
            return "error: " + e.Message;
        }

    }

我似乎无法弄清楚错误是什么,因为当我将JSON扔进在线JSON Formatter时,它会将其报告为有效的JSON。任何帮助将不胜感激。

编辑:只是为了澄清有效的JSON。我尝试在将json字符串发送到客户端之前以及在服务器上接收之后将其打印出来,并且它与上面写的json字符串相同。

2 个答案:

答案 0 :(得分:2)

Argument似乎期待string,但找到了一个对象。您必须检查InstructionServer期望的格式,并确保它能够正确反序列化。

答案 1 :(得分:0)

接收方法需要字符串值,这意味着您必须将对象转换为JSON格式,如下所示:

"{\"MethodName\":\"CreateUser\",\"Argument\":{\"User\":{\"Attributes\":[{\"Name\":\"age\",\"Value\":\"30\",\"Type\":0}],\"Email\":\"test@mail.com\",\"Name\":\"Test Name\"},\"Password\":\"1234\"}}"