簡體   English   中英

如何正確反序列化json數據?

[英]How do I properly deserialize json data?

因此,我一直在瀏覽此示例,以嘗試首次對https://www.newtonsoft.com/json/help/html/DeserializeObject.htm進行反序列化。我試圖從json數據中創建對象,然后獲取相應的屬性。

恩..我說錯了

Newtonsoft.Json.JsonSerializationException:'無法將當前JSON數組(例如[1,2,3])反序列化為類型'json_deserializing.OppedAccounts',因為該類型需要一個JSON對象(例如{“ name”:“ value”})正確反序列化。 要解決此錯誤,可以將JSON更改為JSON對象(例如{“ name”:“ value”}),也可以將反序列化類型更改為數組,或者將實現集合接口的類型(例如ICollection,IList)更改為List,例如List從JSON數組反序列化。 還可以將JsonArrayAttribute添加到類型中,以強制其從JSON數組反序列化。 路徑'',第1行,位置1.'

我是json和反序列化的新手,所以我不確定這里發生了什么。 我的問題是,如何以適當的方式反序列化json? 我讀了一些有關列表和東西的東西,但我無法說明問題。

[
  {
    "uuid": "98e99e7a-df48-4b8b-adc9-e65c32410247",
    "name": "UsernameOne",
    "level": 4,
    "bypassesPlayerLimit": false
  },
  {
    "uuid": "b87e1cbc-c67c-4026-a359-8652ad9de8b4",
    "name": "UsernameTwo",
    "level": 4,
    "bypassesPlayerLimit": false
  }
]

CSharp代碼

public partial class MainWindow : Window
    {
        public string line = null;

        public MainWindow()
        {
            InitializeComponent();
            Deserialize();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            if(line != null)
            {
                OppedAccounts account = JsonConvert.DeserializeObject<OppedAccounts>(line);
                Debug.Print(account.name);
            }
        }

        private void Deserialize()
        {
            using (StreamReader sr = new StreamReader("ops.json"))
            {
                line = sr.ReadToEnd();
            }
            tbjson.AppendText(line);
        }
    }

和班級

class OppedAccounts
    {
        public string uuid { get; set; }
        public string name { get; set; }
        public int level { get; set; }
        public bool bypassplayerlimit { get; set; }
    }

您正在反序列化一個數組,所以您期望返回一個對象數組。 account類型和JsonConvert.DeserializeObject的通用參數JsonConvert.DeserializeObjectList<OppedAccounts>

List<OppedAccounts> accounts = JsonConvert.DeserializeObject<List<OppedAccounts>>(line);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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