使用c#导入JSON文件



我有一个JSON文件,看起来像

{[{ "EmployeeID": "123456", "statusCode": "100", "printDate": "01/01/2021" },{ "EmployeeID": "123456", "statusCode": "100", "printDate": "01/01/2021" }]}

我试图在c#中阅读它,如果我在JSON中有1个元素,它工作得很好。但是,如果我有多个元素,代码就会出现这个错误

无效的属性标识符字符:[。路径",第一行,位置1.

我的代码
var data = await reader.ReadToEndAsync();
var objects = JsonConvert.DeserializeObject<VerificationModel>(data);

模型
public class VerificationModel
{
public string EmployeeID { get; set; }
public string statusCode { get; set; }
public string printDate { get; set; }
}

TL/DR

你的json应该只使用数组(方括号)开始和结束,其中将放置要反序列化的对象。

[{VerificationModel1},{VerificationModel2}]

用你的例子,它将是:

[
{ "EmployeeID": "123456", "statusCode": "100", "printDate": "01/01/2021" },
{"EmployeeID": "123456", "statusCode": "100", "printDate": "01/01/2021" }
]

这将无法工作,因为您的json无效。它应该定义为带有参数的对象:

{ "Key": Value }

其中Value可以是单个值、另一个对象或数组。

或者应该定义为数组:

[ Value, Value2, Value3, ..., ValueN ]

您的Json的问题是,您将其定义为一个对象,但然后,它期待一个Key你只是定义一个数组没有Key在第1行,位置1。

位置0为{,位置1为[

我不知道你的验证模型是什么样子的,但让我们假设它是这样的:

public class VerificationModel {
public string EmployeeID { get; set; }
public string StatusCode { get; set; } 
public DateTime? PrintDate { get; set; }
}

那么你的Json应该是这样的:

[{ "EmployeeID": "123456", "statusCode": "100", "printDate": "01/01/2021" },{ "EmployeeID": "123456", "statusCode": "100", "printDate": "01/01/2021" }]

你的反序列化应该是这样的:

JsonConvert.DeserializeObject<List<VerificationModel>>(data);

您的JSON无效。开始花括号内的文本必须由键值对组成。重新格式化如下,重命名为"d"到适合顶层元素的位置:

{
"d": [{
"EmployeeID": "123456",
"statusCode": "100",
"printDate": "01/01/2021"
},
{
"EmployeeID": "123456",
"statusCode": "100",
"printDate": "01/01/2021"
}
]
}

最新更新