解析值时遇到意外的字符:S。反序列化JSON时的路径

时间:2014-05-05 08:00:08

标签: c# json deserialization

您好我正在尝试从http响应反序列化json,但我总是在解析值时遇到此意外字符:S。路径错误。我该怎么做才能解决这个问题?

这是我的代码:

var client = new HttpClient();
        ///client.BaseAddress = new Uri("https://admin.cssholdings.com/api/v3/AuthenticateLivePOSAdmin/");
        client.DefaultRequestHeaders.Add("APIApplicationID", _clientId);
        client.DefaultRequestHeaders.Add("APIApplicationKey", _clientSecret);

        var PostData = new List<KeyValuePair<string, string>>();
        PostData.Add(new KeyValuePair<string, string>("strAdminUsername", adminusername));
        PostData.Add(new KeyValuePair<string, string>("strAdminPassword", password));
        PostData.Add(new KeyValuePair<string, string>("strAdminSecurityCode", securitycode));

        HttpContent content = new FormUrlEncodedContent(PostData);
        string res = "";


        HttpResponseMessage response = client.PostAsync("https://admin.cssholdings.com/api/v3/AuthenticateLivePOSAdminLogin/", content).Result;






        List<BO.AuthenticatedUser> authuser = JsonConvert.DeserializeObject<List<BO.AuthenticatedUser>>(response.Content.ToString());  

然后这是我在fiddler上看到的json对象:

enter image description here

1 个答案:

答案 0 :(得分:1)

我也有同样的问题。在我看来,问题是在json对象上使用ToString()方法,它返回DeserializeObject方法格式不正确的字符串。 你可以尝试使用这种方法(对我不起作用):

Newtonsoft.Json.Linq.JToken token = Newtonsoft.Json.Linq.JObject.Parse(jsonString);
string templateMsgText = (string)token.SelectToken("yourKey");

而我所做的是我直接接受了我的自定义类中的json字符串并通过get; set来访问它的值。

我是这样做的:

我的服务器端方法:

[WebMethod]
public static string onSubmit(TemplateDataText jsonString)
{ 
  return jsonString.templateMsgText;
}

这是我的自定义类,旨在获取数据:

public class TemplateDataText{
    public TemplateDataText(){}

    [JsonProperty("text")]
    public string templateMsgText { get; set; }

    [JsonProperty("optionSelected")]
    public string radioSelected { get; set; }

}

这是我的json来自ajax POST请求:

{"jsonString":{"text":"THIS IS THE TEXT THAT USER ENTERED","optionSelected":"2"}}

使用这些设置,我能够在服务器端方法中获取“text”值,并能够将其用于进一步处理。