簡體   English   中英

反序列化嵌套的JSON數組

[英]Deserializing a nested JSON array

我正在嘗試使用.NET的DataContractJsonSerializer反序列化以下JSON字符串:

{"region_tag": "eu","services": [{"incidents": [],"status": "online","name": "Client","slug": "client"},{"incidents": [],"status": "online","name": "Game","slug": "game"},{"incidents": [],"status": "online","name": "Store","slug": "store"},{"incidents": [],"status": "online","name": "Website","slug": "web"}],"locales": ["en_GB","de_DE","es_ES","fr_FR","it_IT"],"name": "EU West","hostname": "prod.euw1.lol.riotgames.com","slug": "euw"}

我可以成功反序列化第一個獲得以下字符串(或string [])的部分:

hostname - returns "prod.euw1.lol.riotgames.com"
name - returns "EU West"
region_tag - returns "eu"
slug - "euw"
locales - "en_GB, de_DE, es_ES, fr_FR, it_IT"

但是我似乎無法反序列化其余部分,因為它們都嵌套在另一個屬性中。 我該怎么做?

為完整的代碼。

但是代碼如下:

public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }

        DataContractJsonSerializer shard;
        MemoryStream shardms;

        void TriggerUpdate(object json)
        {
            try
            {
                ResultListBox.Items.Clear();

                shard = new DataContractJsonSerializer(typeof(ShardStatus));
                shardms = new MemoryStream(Encoding.UTF8.GetBytes(json.ToString()));

                ShardStatusRoot.shardupd = (ShardStatus)shard.ReadObject(shardms);

                #region ShardStatus
                ResultListBox.Items.Add("Hostname: " + ShardStatusRoot.shardupd.hostname);
                foreach (string i in ShardStatusRoot.shardupd.locales)
                {
                    ResultListBox.Items.Add("Locales: " + i);

                }
                ResultListBox.Items.Add("Location: " + ShardStatusRoot.shardupd.name);
                ResultListBox.Items.Add("Region Tag: " + ShardStatusRoot.shardupd.region_tag);
                ResultListBox.Items.Add("Slug: " + ShardStatusRoot.shardupd.slug);
                #endregion
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message + " => " + e.InnerException);
            }
        }

public class ShardStatusRoot
{
    public static ShardStatus shardupd;
}

[DataContract]
public class ShardStatus
{
    [DataMember]
    public string hostname { get; set; }
    [DataMember]
    public string name { get; set; }
    [DataMember]
    public string region_tag { get; set; }
    [DataMember]
    public string slug { get; set; }
    [DataMember]
    public string[] locales { get; set; }
    [DataMember]
    public ShardService shardserv;
}

[DataContract]
public class ShardService
{
    [DataMember]
    public string name { get; set; }
    [DataMember]
    public string slug { get; set; }
    [DataMember]
    public string status { get; set; }
    [DataMember]
    public ShardServiceIncident shardservinc;
}

[DataContract]
public class ShardServiceIncident
{
    [DataMember]
    public bool active { get; set; }
    [DataMember]
    public string created_at { get; set; }
    [DataMember]
    public long id { get; set; }
    [DataMember]
    public ShardServiceIncidentUpdate shardservincupd;
}

[DataContract]
public class ShardServiceIncidentUpdate
{
    [DataMember]
    public string author { get; set; }
    [DataMember]
    public string content { get; set; }
    [DataMember]
    public string created_at { get; set; }
    [DataMember]
    public long id { get; set; }
    [DataMember]
    public string severity { get; set; }
    [DataMember]
    public string updated_at { get; set; }
    [DataMember]
    public ShardServiceIncidentUpdateTranslation shardservincupdtrans;
}

[DataContract]
public class ShardServiceIncidentUpdateTranslation
{
    [DataMember]
    public string content { get; set; }
    [DataMember]
    public string locale { get; set; }
    [DataMember]
    public string updated_at { get; set; }
}

TriggerUpdate方法通過組合框中的選擇被觸發。

嘗試使用Newtonsoft.Json,它可以為您提供幫助。

暫無
暫無

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

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