【问题标题】:Error: Could not cast or convert from System.String错误:无法从 System.String 转换或转换
【发布时间】:2020-08-14 14:12:48
【问题描述】:

我收到此错误:ArgumentException: Could not cast or convert from System.String to API_STA_1.Classes.ProjectenEnPersoneelDATA. 尝试将 json 文件中的数据转换为字符串时。

我要获取的值是 "unavailable",当我尝试获取不同的值时,它确实有效,但它仅不适用于该值。

JSON:

【问题讨论】:

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


【解决方案1】:

所以首先我要澄清这个问题。

OP 有 C# 类:

public class ProjectsAndUsers
{
    public IList<ProjectenEnPersoneelDATA> Unavailable { get; set; }
    public IList<ProjectenEnPersoneelDATA> Types { get; set; }
}


public class ProjectenEnPersoneelDATA
{
    public string[] unavailable { get; set;}

    public string title { get; set; }
    public string color { get; set;}
}

和 JSON:

{
  "unavailable": [
    "2019-10-09",
    "2019-10-14",
    "2019-10-15",
    "2019-12-21",
    "2019-12-14",
    "2019-12-02",
    "2019-12-08"
  ],
  "types": [
    {
      "title": "Veiligheidsinspectie",
      "color": "#FF9D00"
    },
    {
      "title": "Kwaliteitscontrole",
      "color": "#B434DB"
    },
    {
      "title": "Bezet",
      "color": "#252525"
    }
  ]
}

C#类型和JSON结构不匹配:

Unavailable 在 JSON 中是一个字符串数组,而在 C# 类中 ProjectsAndUsers 它是一个类型为 ProjectenEnPersoneelDATA 的对象数组。这会导致异常。

要解决此问题,您需要将 C# 类型调整为:

public class ProjectsAndUsers
{
    public string[] unavailable { get; set;}
    public IList<ProjectenEnPersoneelDATA> Types { get; set; }
}


public class ProjectenEnPersoneelDATA
{
    public string title { get; set; }
    public string color { get; set;}
}

【讨论】:

    【解决方案2】:

    您从 WebClient 获得的响应似乎有问题。我成功地将您的 JSON 解析到您的课程中。使用以下。

        static void Main(string[] args)
        {
            var json = @"{""color"": ""red"", ""title"": ""Random Title"", 
            ""unavailable"": [""2010-10-09"", ""2010-10-19"", ""2010-10-20"",""2010-10- 
            29""]}";
    
            var res = JsonConvert.DeserializeObject<PDATA>(json);
            foreach (var item in res.unavailable)
            {
                Console.WriteLine(item);
            }
    
            Console.ReadLine();
        }
    
        public class PDATA
        {
            public string[] unavailable { get; set; }
            public string title { get; set; }
            public string color { get; set; }
        }
    

    【讨论】:

      【解决方案3】:

      不参考你的序列化字符串很难说。添加以下内容并检查

      var json = webclinet.DownloadString(path);
      var jsonResult = JsonConvert.DeserializeObject(json).ToString();
      var jsonObject = JsonConvert.DeserializeObject<yourClass>(jsonResult);
      
      

      【讨论】:

      • @T.v.A.你能把下载的字符串贴出来吗?
      • 对不起,我不明白,你想让我发什么?
      • 你进入 var json 的值
      • 您从 webClient.DownloadString() 获取的 json 字符串中一定有问题发布了该序列化值。
      猜你喜欢
      • 1970-01-01
      • 2012-01-26
      • 1970-01-01
      • 2017-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-14
      • 1970-01-01
      相关资源
      最近更新 更多