[英]JSON deserialization in C# sub array
我正在嘗試使用Newtonsoft.Json反序列化以下內容
{
"max_id_str":"1234567",
"results":[{
"created_at":"Tue, 21 May 2013 03:06:23 +0000",
"from_user":"Name Here",
"from_user_id":33333,
"text":"THE TEXT GOES HERE"
}],
"results_per_page":1,
"since_id":0,
"since_id_str":"0"
}
我可以使用反序列化來檢索max_id_str,但無法在“結果”中獲取任何數據
這是我的代碼
public class tweet
{
public string max_id_str { get; set; }
public string text{ get; set; }
public string results_per_page{ get; set; }
public string since_id { get; set; }
public string since_id_str { get; set; }
}
然后,我創建該類的對象,然后嘗試將其反序列化為該對象
tweet t = new tweet();
t = JsonConvert.DeserializeObject<tweet>(e.Result);
除了“文本”之外的所有內容都在填充? 輸出值時,文本的值為null。 有什么想法可以完成我正在嘗試的工作嗎?
我不確定您期望將JSON字符串反序列化為該類型, text
不是對象的屬性,因此沒有理由期望它這樣做。 text
是results
列表中對象的屬性。 您還需要映射那些對象,然后通過result
對象訪問文本。
public class tweet
{
public string max_id_str { get; set; }
//public string text{ get; set; }
public List<result> results { get; set; }
public string results_per_page{ get; set; }
public string since_id { get; set; }
public string since_id_str { get; set; }
}
public class result
{
public string created_at { get; set; }
public string from_user { get; set; }
public int from_user_id { get; set; }
public string text { get; set; }
}
如果試圖使用結果中的值來確定文本屬性的值,則可以編寫一個轉換器以提取文本值。 只需將JsonProperty
和JsonConverter
屬性添加到您的text
屬性並實現轉換器。
public class tweet
{
public string max_id_str { get; set; }
[JsonProperty("results")]
[JsonConverter(typeof(TextPropertyResultExtractorConverter))]
public string text { get; set; }
public string results_per_page{ get; set; }
public string since_id { get; set; }
public string since_id_str { get; set; }
}
public class TextPropertyResultExtractorConverter : JsonConverter
{
public override bool CanConvert(Type type)
{
throw new NotImplementedException();
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
var results = (JArray)serializer.Deserialize(reader);
var result = results.First();
return result.Value<string>("text");
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
這是因為text
是一個子元素,而在C#對象中,您直接在tweet中擁有它。 您缺少results
對象作為屬性。 解串器無法知道將這些值放在何處(沒有相應的屬性)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.