C# 无法反序列化Json数组

C# 无法反序列化Json数组,c#,serialization,json.net,C#,Serialization,Json.net,我想首先说,我不是一个开发人员,这是我第一次编写这样复杂的代码(至少对我来说)。任何帮助/指导都将不胜感激 该程序的思想是在输入姓名后从API URL检索员工用户ID(或签名) 我有一个JSON字符串 [{"signature":"JDOW","firstName":"Jane","fullName":"Dow, Jane","lastName":"

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

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

我有一个JSON字符串

[{"signature":"JDOW","firstName":"Jane","fullName":"Dow, Jane","lastName":"Dow"}]
我正在尝试将其反序列化为一个集合。但是我犯了一个错误。有人能告诉我解决这个问题的正确方法吗

namespace TimeSheet_Try11_Models
{
    public class Employeename
    {
        [JsonProperty("Signature")]
        public string Signature { get; set; }

        [JsonProperty("FirstName")]
        public string FirstName { get; set; }
        
        [JsonProperty("FullName")]
        public string FullName { get; set; }
       
        [JsonProperty("LastName")]
        public string LastName { get; set; }
    } 
}
我正在尝试使用以下代码进行转换:

uri = StaticStrings.UrlIora + name;
var response = wc.DownloadString(uri);

Employeename status = JsonConvert.DeserializeObject<Employeename>(response);
uri=StaticStrings.UrlIora+name;
var response=wc.DownloadString(uri);
Employeename status=JsonConvert.DeserializeObject(响应);
我得到的错误是:

Newtonsoft.Json.JsonSerializationException:'无法将当前Json数组(例如[1,2,3])反序列化为类型'TimeSheet_Try11_Models.Employeename',因为该类型需要一个Json对象(例如{“name”:“value”})才能正确反序列化


JSON字符串周围有方括号(
[]
),这意味着它是一个项目集合。 这就是反序列化程序出错的原因

您需要删除这些括号,以便在输入字符串中只提供一个employee对象,或者告诉
反序列化对象
,它是您正在反序列化的
列表

var converted = JsonConvert.DeserializeObject<List<Employeename>>(response);
var converted=JsonConvert.DeserializeObject(响应);

您的JSON字符串周围有方括号(
[]
),这意味着它是一个项目集合。 这就是反序列化程序出错的原因

您需要删除这些括号,以便在输入字符串中只提供一个employee对象,或者告诉
反序列化对象
,它是您正在反序列化的
列表

var converted = JsonConvert.DeserializeObject<List<Employeename>>(response);
var converted=JsonConvert.DeserializeObject(响应);

Working Fiddle将收集的Json数据反序列化为:

var status = JsonConvert.DeserializeObject<List<Employeename>>(response);

类似地,还可以从
状态中获取其他值,将Json数据反序列化为:

var status = JsonConvert.DeserializeObject<List<Employeename>>(response);

类似地,也可以从
状态

中获取其他值,因为您当前没有尝试将其反序列化为集合-您正在尝试将其反序列化为单个
员工姓名
。如果您调用
DeserializeObject
,它将尝试将其反序列化为一个集合-我怀疑一切都会好起来。感谢您的评论,但是,我没有在整个语句下面看到红线:JsonConvert.DeserializeObject(response);说“不能隐式地将类型”System.collection.Generic.List“转换为”TimeSheet\u Try11\u Models.Employeename“不,您还需要更改变量的类型,因为您正在尝试反序列化到集合。(当它是员工姓名的集合时,为什么要调用该变量
status
,这是另一回事…)修复了错误,谢谢。我还有一个愚蠢的问题(这也是我第一次编程)。我最初使用的语句字符串signature=status.signature.ToString();和返回签名。当然,在“状态”下有一条红线,那么我要把它改成什么呢?堆栈溢出不是来回的-这不是学习编程的有效方法。如果您不了解基本知识,那么您将不断地为每一行代码而奋斗。我强烈建议您从C#的初学者教程开始,否则您的进度将非常缓慢。您当前没有尝试将其反序列化为集合-您正在尝试将其反序列化为单个
Employeename
。如果您调用
DeserializeObject
,它将尝试将其反序列化为一个集合-我怀疑一切都会好起来。感谢您的评论,但是,我没有在整个语句下面看到红线:JsonConvert.DeserializeObject(response);说“不能隐式地将类型”System.collection.Generic.List“转换为”TimeSheet\u Try11\u Models.Employeename“不,您还需要更改变量的类型,因为您正在尝试反序列化到集合。(当它是员工姓名的集合时,为什么要调用该变量
status
,这是另一回事…)修复了错误,谢谢。我还有一个愚蠢的问题(这也是我第一次编程)。我最初使用的语句字符串signature=status.signature.ToString();和返回签名。当然,在“状态”下有一条红线,那么我要把它改成什么呢?堆栈溢出不是来回的-这不是学习编程的有效方法。如果您不了解基本知识,那么您将不断地为每一行代码而奋斗。我强烈建议您从C#的初学者教程开始,否则您的进度将非常缓慢。这修复了错误,谢谢。我还有一个愚蠢的问题(这也是我第一次编程)。我最初使用的语句字符串signature=status.signature.ToString();和返回签名。现在,在“状态”下有一条红线,那么我应该把它改成什么呢?请看小提琴-因为反序列化的输出是一个列表,所以在使用
[0]
之前,您需要从中获取一个项目,方法是使用
.Signature
索引,修复错误,谢谢。我还有一个愚蠢的问题(这也是我第一次编程)。我最初使用的语句字符串signature=status.signature.ToString();和返回签名。现在,在“状态”下有一条红线,那么我会把它改成什么呢?请看小提琴-因为反序列化的输出是一个列表,所以您需要在使用
.Signature
之前通过
[0]
索引从中获取一个项目