使用以下REST服务响应:
"[{"field1":"Eva","field2":"29","field3":false},{"field1":"Karen","field2":"32","field3":false}]"
当试图反序列化它时,我得到一个错误(error: line 1, position 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);
谁能帮帮我?您需要使用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>>();
"field3"必须是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; }
}
感谢大家的回复。最后,这个问题与在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);
谢谢。