使用以下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);
可以帮助我吗?
提前致谢。
答案 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);
感谢。