【发布时间】:2017-06-10 00:37:43
【问题描述】:
我似乎遇到了一个问题,我尝试将 json 数组反序列化为 C# 列表(我正在使用 Json.NET)。问题是我收到一个错误:
无法将当前 JSON 数组(例如 [1,2,3])反序列化为类型 'ProjectName.WebServices.EventWebMethods+ServiceItem' 因为类型 需要一个 JSON 对象(例如 {"name":"value"})来反序列化 正确。 要修复此错误,请将 JSON 更改为 JSON 对象(例如 {"name":"value"})或将反序列化类型更改为数组或 实现集合接口的类型(例如 ICollection、IList) 比如可以从 JSON 数组反序列化的 List。 JsonArrayAttribute 也可以添加到类型中以强制它 从 JSON 数组反序列化。 路径“[0]”,第 1 行,位置 2。
这是我的 json 代码,它是通过获取一个 javascript 数组并在其上使用 JSON.stringify 创建的:
[["6249","Locked"],["6250","Locked"],["6251","Locked"]]
这是我正在使用的 C# 代码:
[Serializable]
public class ServiceItem
{
long lngId{ get; set; }
string strStatus{ get; set; }
public ServiceItem() { }
}
[WebMethod(EnableSession = true)]
public string Create(string strJSON)
{
//Error happens on this next line:
List<ServiceItem> ServiceData = JsonConvert.DeserializeObject<List<ServiceItem>>(strJSON);
return "test";
}
如何将其反序列化到 C# 类中。任何帮助表示赞赏!
更新
我对我的 javascript 进行了更改,使其包含建议的变量名。还是一样的错误。这是 C# 变量中的 JSON:
[
[\"lngId\" : \"6249\",\"strStatus\" : \"Locked\"],
[\"lngId\" : \"6250\",\"strStatus\" : \"Locked\"],
[\"lngId\" : \"6251\",\"strStatus\" : \"Locked\"]
]
花括号那么重要吗?如果这是问题所在,为什么 JSON.Stringify 不这样做?
更新 2
想通了。我需要像这样创建每个 json 项目:
arrServices.push({"lngId": intServiceID, "strStatus" : "Locked"});
现在可以了。感谢您的帮助!
【问题讨论】:
-
json 无效好友,json2csharp.com
标签: javascript c# json list json.net