我需要一些帮助来反序列化这个JSON。
我正在使用牛顿软件来反序列化 JSON:
这是我的 JSON 的样子:
[
{
"CUSTOMER":{
"CUSTOMERNO":"ABC123",
"BUSINESSAREA":"A",
"FIRSTNAME":"B",
"LASTNAME":"Goos",
"GENDER":1
},
"PERMISSION":[
{
"EMAIL":"bg@123.com",
"TYPE":"ALL",
"VALUE":1,
"STATUS":"test",
"DATAORIGIN":"CUBA",
"PERMISSIONDATE":"2016-11-30 00:00:00",
"CHANGEDATE":"2016-11-30 00:00:00"
},
{
"EMAIL":"bg@346.com",
"TYPE":"NECC",
"VALUE":0,
"STATUS":"test2",
"DATAORIGIN":"CUBA",
"PERMISSIONDATE":"2016-10-30 00:00:00",
"CHANGEDATE":"2016-10-30 00:00:00"
}
]
}
]
这是我的模型:
public class CUSTOMER
{
public string CUSTOMERNO { get; set; }
public string BUSINESSAREA { get; set; }
public string FIRSTNAME { get; set; }
public string LASTNAME { get; set; }
public int GENDER { get; set; }
}
public class PERMISSION
{
public string EMAIL { get; set; }
public string TYPE { get; set; }
public int VALUE { get; set; }
public string STATUS { get; set; }
public string DATAORIGIN { get; set; }
public string PERMISSIONDATE { get; set; }
public string CHANGEDATE { get; set; }
}
public class RootObject
{
public CUSTOMER CUSTOMER { get; set; }
public List<PERMISSION> PERMISSION { get; set; }
}
当我使用以下代码反序列化 JSON 时:
var jobject = JsonConvert.DeserializeObject<RootObject>(value);
我收到以下错误:
无法将当前 JSON 数组(例如 [1,2,3])反序列化为类型 "TCookRestWrapper.Models.RootObject",因为该类型需要 JSON 对象(例如 {"名称":"值"})以正确反序列化。要解决此问题 错误将 JSON 更改为 JSON 对象(例如 {"名称":"值"}) 或将反序列化类型更改为数组或实现的类型 一个集合接口(例如 ICollection、IList),如 List 可以 从 JSON 数组反序列化。JsonArrayAttribute 也可以是 添加到类型以强制它从 JSON 数组反序列化。路径 '',第 1 行,位置 1。
我将不胜感激任何如何解决它的想法。
无法将当前的 JSON 数组(例如 [1,2,3])反序列化为类型"TCookRestWrapper.Models.RootObject"....
指示您正在尝试将数组反序列化为一个对象,更准确地说RootObject
您可以清楚地看到您拥有的 JSON 以[
开头,以]
结尾。这意味着它是一个数组。
虽然正确的答案很简单,但反序列化为一种List<RootObject>
:
var jobject = JsonConvert.DeserializeObject<List<RootObject>>(value);
属性命名准则
准则和良好做法是通过某种含义命名您的属性并使用 pascal 案例。
在处理您提供的 JSON 时执行此操作非常简单,可以使用属性轻松实现,就像在下一个类中一样。
(注意:我将属性名称"权限"更改为"权限",因为它可以容纳更多权限。
public class Customer
{
[JsonProperty("CUSTOMERNO")]
public string CustomerNo { get; set; }
[JsonProperty("BUSINESSAREA")]
public string BusinessArea { get; set; }
[JsonProperty("FIRSTNAME")]
public string FirstName { get; set; }
[JsonProperty("LASTNAME")]
public string LastName { get; set; }
[JsonProperty("GENDER")]
public int Gender { get; set; }
}
public class Permission
{
[JsonProperty("EMAIL")]
public string Email { get; set; }
[JsonProperty("TYPE")]
public string Type { get; set; }
[JsonProperty("VALUE")]
public int Value { get; set; }
[JsonProperty("STATUS")]
public string Status { get; set; }
[JsonProperty("DATAORIGIN")]
public string DataOrigin { get; set; }
[JsonProperty("PERMISSIONDATE")]
public string PermissionDate { get; set; }
[JsonProperty("CHANGEDATE")]
public string ChangeDate { get; set; }
}
public class RootObject
{
[JsonProperty("CUSTOMER")]
public Customer Customer { get; set; }
[JsonProperty("PERMISSION")]
public List<Permission> Permissions { get; set; }
}
您的 Json 字符串是一个对象数组,因为它以[]
开头,因此您需要将其反序列化为RootObject
列表。
var jobject = JsonConvert.DeserializeObject<List<RootObject>>(value);