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