[英]How to deserialize json into C# List Object
我似乎遇到了一個問題,我嘗試將json數組反序列化為C#列表(我正在使用Json.NET)。 問題是我遇到錯誤:
無法將當前JSON數組(例如[1,2,3])反序列化為類型'ProjectName.WebServices.EventWebMethods + ServiceItem',因為該類型需要JSON對象(例如{“ name”:“ value”})才能正確反序列化。 要解決此錯誤,可以將JSON更改為JSON對象(例如{“ name”:“ value”}),也可以將反序列化類型更改為數組,或者將實現集合接口的類型(例如ICollection,IList)更改為List,例如List從JSON數組反序列化。 還可以將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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.