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