【问题标题】:JSON error deserializeJSON错误反序列化
【发布时间】:2016-08-27 13:16:48
【问题描述】:

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

有人可以帮我吗?

提前致谢。

【问题讨论】:

  • 如果您真的收到该响应,则它已被双重编码。有人获取了一个结构并通过 JSON 序列化器将其转换为 JSON 字符串,然后获取该字符串并通过 JSON 序列化器再次运行它。

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


【解决方案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>>();

【讨论】:

    【解决方案2】:

    "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; }
    }
    

    【讨论】:

      【解决方案3】:

      感谢大家的回复。最后,问题与在 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);
      

      谢谢。

      【讨论】:

      猜你喜欢
      • 2018-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多