C# C:“无法反序列化当前JSON数组”

C# C:“无法反序列化当前JSON数组”,c#,C#,我想首先说,我不是一名开发人员,这是我第一次编写这样复杂的代码,至少对我来说是这样。任何帮助/指导都将不胜感激 该程序的思想是在输入姓名后从API URL检索员工用户ID或签名 我创建了一个类,用于标识需要从API检索的信息,下面是代码: namespace TimeSheet_Try11_Models { public class Employeename { public List<string> Signature { get; set

我想首先说,我不是一名开发人员,这是我第一次编写这样复杂的代码,至少对我来说是这样。任何帮助/指导都将不胜感激

该程序的思想是在输入姓名后从API URL检索员工用户ID或签名

我创建了一个类,用于标识需要从API检索的信息,下面是代码:

 namespace TimeSheet_Try11_Models
 {
     public class Employeename
     {
         public List<string> Signature { get; set; }
         public List<string> FirstName { get; set; }
         public List<string> FullName { get; set; }
         public List<string> LastName { get; set; }
     }

 }
接下来,我创建了一个名为WebAPI的文件夹,它将访问API并检索所需的信息。请看代码

 namespace TimeSheets_Try_11.Controllers
 {
     class WebAPI
     {
         public string Getsignature(string name)
         {


             var cookies = FullWebBrowserCookie.GetCookieInternal(new Uri(StaticStrings.UrlIora), false);
             WebClient wc = new WebClient();
             wc.Encoding = System.Text.Encoding.UTF8;
             wc.Headers.Add("Cookie:" + cookies);
             wc.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
             wc.UseDefaultCredentials = true;
             string uri = "";

             ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
             uri = StaticStrings.UrlIora + name;
             var response = wc.DownloadString(uri);


             string json = @"[{'signature':'JANDO','firstName':'Jane','fullName':'Deo, Jane','lastName':'Deo'}]";

             Employeename status = JsonConvert.DeserializeObject<Employeename>(json);

             string signature = status.Signature.ToString();
             return signature;


         }
     }
 }
最后,以下代码是我的表单代码,用于检索和显示信息

     namespace TimeSheets_Try_11
     {
         public partial class Form1 : Form
         {
             WebAPI WA = new WebAPI();
             public Form1()
             {
                 InitializeComponent();
                 webBrowser1.Url = new Uri(StaticStrings.UrlIora);
             }

             private void label1_Click(object sender, EventArgs e)
             {

             }

             private void button1_Click(object sender, EventArgs e)
             {
                 string strurltest = string.Format("https://iora.UniversityofHouston.com/api/dictionary/employee/" + textBox1.Text);
                 System.Net.WebRequest requestObjGet = WebRequest.Create(strurltest);
                 requestObjGet.Credentials = CredentialCache.DefaultNetworkCredentials;
                 requestObjGet.Method = "Get";
                 HttpWebResponse reponsObjGet = null;
                 reponsObjGet = (HttpWebResponse)requestObjGet.GetResponse();



                 string[] usernames = new string[] { "Koehne, Craig", "Bergeron, Ronald" };
                 string[] userid = new string[] { "CKOEH", "RONBE" };

                 for (int i = 0; i < usernames.Length; i++)
                 {
                     if (textBox1.Text.Contains(usernames[i]))
                     {
                         textBox2.Text = userid[i];
                     }

                 }

                 string sgname; string projectstring;
                 projectstring = textBox1.Text.ToString();

                 sgname = WA.Getsignature(projectstring);

             }

             private void textBox2_TextChanged(object sender, EventArgs e)
             {

                 string StringConn = textBox1.Text;


             }

             private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
             {

             }
         }
     }
问题:代码似乎没有任何错误,但是当我开始调试代码时,它会给我一个错误,说明:

Newtonsoft.Json.JsonSerializationException:'无法反序列化 当前JSON数组,例如[1,2,3]到类型 “TimeSheet\u Try11\u Models.Employeename”,因为该类型需要JSON 对象,例如{name:value}以正确反序列化


JSON字符串包含一个包含一个对象的数组。但您正试图将其反序列化为一个对象

将JSON字符串反序列化为C数组:

string json = @"[{'signature':'JANDO','firstName':'Jane','fullName':'Deo, Jane','lastName':'Deo'}]";

Employeename[] status = JsonConvert.DeserializeObject<Employeename[]>(json);

JSON字符串包含一个包含一个对象的数组。但您正试图将其反序列化为一个对象

将JSON字符串反序列化为C数组:

string json = @"[{'signature':'JANDO','firstName':'Jane','fullName':'Deo, Jane','lastName':'Deo'}]";

Employeename[] status = JsonConvert.DeserializeObject<Employeename[]>(json);

@[{'signature':'JANDO','firstName':'Jane','fullName':'Deo,Jane','lastName':'Deo'}];是json数组,请尝试var status=JsonConvert.DeserializeObjectjson;另外,请阅读以下内容:@[{'signature':'JANDO','firstName':'Jane','fullName':'Deo,Jane','lastName':'Deo'}];是json数组,请尝试var status=JsonConvert.DeserializeObjectjson;也请阅读。谢谢你的帮助!但是,我尝试了删除方括号的第一个选项,它给了我一个错误:“将值转换为类型时出错”System.Collections.Generic.List`1[System.String]”。路径“签名”,第1行,位置21。“我还尝试了第二种方式Employeename[]status=JsonConvert.DeserializeObjectjson;但是,我现在在字符串signature=status.signature.ToString下面有一行。解释Employeename[]不包含'Signature'@programmer101的定义时,我首先忽略了它,但我只是注意到您的Employeename类没有任何意义。我已经更新了我的答案。是的,我也尝试过这种格式。不幸的是,我仍然在同一个地方遇到同样的错误。错误本质上是说它无法将JSON中的内容转换为列表。如果你仍然得到那个错误,你仍然有一个你不应该有一个列表的地方的列表。在我的答案中有类,在我的答案中有JSON,一切都正常。谢谢你的帮助!但是,我尝试了删除方括号的第一个选项,它给了我一个错误:“将值转换为类型时出错”System.Collections.Generic.List`1[System.String]”。路径“签名”,第1行,位置21。“我还尝试了第二种方式Employeename[]status=JsonConvert.DeserializeObjectjson;但是,我现在在字符串signature=status.signature.ToString下面有一行。解释Employeename[]不包含'Signature'@programmer101的定义时,我首先忽略了它,但我只是注意到您的Employeename类没有任何意义。我已经更新了我的答案。是的,我也尝试过这种格式。不幸的是,我仍然在同一个地方遇到同样的错误。错误本质上是说它无法将JSON中的内容转换为列表。如果你仍然得到那个错误,你仍然有一个你不应该有一个列表的地方的列表。在我的答案中有类,在我的答案中有JSON,一切正常。
public class Employeename
{
    public string Signature { get; set; }
    public string FirstName { get; set; }
    public string FullName { get; set; }
    public string LastName { get; set; }
}