簡體   English   中英

如何將json反序列化為C#列表對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM