JSON反序列化错误



使用以下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);

谢谢。

相关内容

  • 没有找到相关文章

最新更新