.Net c#与Json错误:转换值时出错

问题描述

我似乎不太愿意将Json转换为所需的List类。

我得到了Json文件,并将其传递给Json to C#

生成了该类:

    public class Customers
{
    [JsonProperty("Customers")]
    public string Oid { get; set; }
    [JsonProperty("Customers")]
    public string Name { get; set; }
    [JsonProperty("Customers")]
    public string Title { get; set; }
    [JsonProperty("Customers")]
    public string Kwdikos { get; set; }
    [JsonProperty("Customers")]
    public string AFM { get; set; }
    [JsonProperty("Customers")]
    public string Email { get; set; }
    [JsonProperty("Customers")]
    public string DOY { get; set; }
    [JsonProperty("Customers")]
    public string Occupation { get; set; }
    [JsonProperty("Customers")]
    public int FPA { get; set; }

}

public class CustomersList
 {
     [JsonProperty("Customers")]
    public List<Customers> _customersList { get; set; }
 }

我正在使用代码将Json像这样添加到我的List类:

var content = await response.Content.ReadAsstringAsync();
var customers = JsonConvert.DeserializeObject<List<CustomersList>>(content,new JsonSerializerSettings
                {
                    NullValueHandling = NullValueHandling.Ignore
                });

但我收到一条错误消息:

Newtonsoft.Json.JsonSerliazitaionException:'转换值时出错 “((我的Json文件)”)键入

'System.Collections.Generic.List`1 [DemoProject6.CustomersList]'。路径 ”,第1行,位置37574。'

关于如何解决此问题的任何想法?谢谢您的时间!!!

解决方法

为属性指定

JsonPropertyAttribute,即JSON文本中的名称。但是在您的示例中,所有属性都具有[JsonProperty("Customers")]。您的模型生成的JSON将是:

{
  "Customer": [{
    "Customers": "Oid value","Customers": "Name value","Customers": "Title value",...
  }]
}

在JSON中,您不能按级别拥有某些具有相同名称的属性。

默认情况下,json属性的名称是class属性的名称。 解决方案:

public class Customers
{
    public string Oid { get; set; }
    public string Name { get; set; }
    public string Title { get; set; }
    public string Kwdikos { get; set; }
    public string AFM { get; set; }
    public string Email { get; set; }
    public string DOY { get; set; }
    public string Occupation { get; set; }
    public int FPA { get; set; }
}

然后

var content = await response.Content.ReadAsStringAsync();
var customers = JsonConvert.DeserializeObject<List<Customers>>(content);

编辑: 我认为回应的内容格式不正确。 也许您可以尝试:

var content = await response.Content.ReadAsStringAsync();
var customersJson = Regex.Unescape(content.Substring(1,content.Length - 2));
var customers = JsonConvert.DeserializeObject<List<Customers>>(customersJson);