JSON错误反序列化

时间:2016-08-27 13:16:49

标签: c# asp.net json json.net

使用以下REST服务响应:

"[{\"field1\":\"Eva\",\"field2\":\"29\",\"field3\":false},{\"field1\":\"Karen\",\"field2\":\"32\",\"field3\":false}]"

我在尝试反序列化时遇到错误(错误:第1行,第117位)

public class Person
{
   public string field1 { get; set; }
   public string field2 { get; set; }
   public string field3 { get; set; }
}

Task<string> jsonString = response.Content.ReadAsStringAsync();
jsonString.Wait();
var model = JsonConvert.DeserializeObject<List<Person>>(jsonString.Result);

可以帮助我吗?

提前致谢。

3 个答案:

答案 0 :(得分:1)

您需要使用JToken来解析您的回复。在那之后,您应该能够反序列化它。以下是一个工作示例:

public class Person
{
   public string field1 { get; set; }
   public string field2 { get; set; }
   public string field3 { get; set; }
}

var response = "[{\"field1\":\"Eva\",\"field2\":\"29\",\"field3\":false},{\"field1\":\"Karen\",\"field2\":\"32\",\"field3\":false}]";
JToken json = JToken.Parse(response);
var model = json.ToObject<List<Person>>();

答案 1 :(得分:0)

&#34;字段3&#34;必须是bool而不是字符串。

public bool field3 { get; set; }

如果这不起作用,请尝试使用此结构,因为它似乎是基于您提供的json的正确结构:

public class Rootobject
{
    public Person[] Person { get; set; }
}

public class Person
{
    public string field1 { get; set; }
    public string field2 { get; set; }
    public bool field3 { get; set; }
}

答案 2 :(得分:0)

感谢大家的回复。最后,问题与在REST服务中发送信息时使用的类型有关:字符串而不是流。现在效果很好!如果可以帮助任何人,这是服务器端的代码:

JsonString = JsonConvert.SerializeObject(ds.Tables[0], Formatting.Indented);
                WebOperationContext.Current.OutgoingResponse.ContentType = "application/json; charset=utf-8";
                return new MemoryStream(Encoding.UTF8.GetBytes(JsonString));

@Oluwafemi确实需要使用?:

JToken json = JToken.Parse(response);

感谢。