如何将json反序列化为C#列表对象



我似乎遇到了一个问题,我试图将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表示字符串数组的数组。表示ServiceItem类表示的模式的JSON如下所示:

[  
{  
"lngID":"6249",
"strStatus":"Locked"
},
{  
"lngID":"6250",
"strStatus":"Locked"
},
{  
"lngID":"6251",
"strStatus":"Locked"
}
]

您需要在另一端以不同的方式序列化数据(以便它与您的类相匹配)。如果这不是一个选项,那么您将不得不在服务器上手动反序列化JSON:

List<ServiceItem> ServiceData =
JArray
.Parse(input)
.Select(x => x.ToArray())
.Select(x => new ServiceItem()
{
lngId = x[0].Value<int>(),
strStatus = x[1].Value<String>()
})
.ToList();

或者实现自定义JsonConverter

相关内容

  • 没有找到相关文章

最新更新