0
我做了一個自定義JSON轉換器來處理我收到的JSON,但我有一些解析嵌套對象列表的麻煩。我的JSON目前看起來像這樣:反序列化自定義JsonConverter中的嵌套對象列表
JSON:
{
"messageID": "1",
"item":
{ "type": "text",
"textlist": [ { "text": "just some text" }]
}
}
在我的情況下,我創建了幾個類可以轉換爲。我有一個消息類應用轉換器的項目。 item屬性是一個接口,它具有TextItem類形式的實現。
public class Message
{
[JsonProperty("messageID")]
public string messageID { get; set; }
[JsonConverter(typeof(ItemConverter))]
public IItem item { get; set; }
public Message(string msgID, IItem itm)
{
messageID = msgID;
item = itm;
}
}
public class TextItem : IItem
{
[JsonProperty("type")]
public string type { get; set; }
[JsonProperty("textlist")]
public List<Text> textlist { get; set; }
string IItem.Type
{
get => type;
set => type = value;
}
public TextItem(List<Text> txtlst)
{
type = "text";
textlist = txtlst;
}
}
public class Text
{
[JsonProperty("text")]
public string text { get; set; }
public Text(string txt)
{
text = txt;
}
}
有相當多的不同類型的項目,這就是爲什麼我有ItemConverter:
public class ItemConverter : JsonConverter
{
public override object ReadJson(JsonReader reader,
Type objectType, object existingValue,
JsonSerializer serializer)
{
var jsonObject = JObject.Load(reader);
var item= default(IItem);
switch (jsonObject["type"].Value<string>())
{
case "text":
item= new TextItem(jsonObject["textlist"].Value<List<Text>>());
break;
// omitted non relevant cases
}
serializer.Populate(jsonObject.CreateReader(), item);
return item;
}
}
然而,調用DeserializeObject只會導致錯誤
JsonConvert.DeserializeObject<Message>(userMessage)
// I get the following error:
System.ArgumentNullException: Value cannot be null.
所有我的其他案例(沒有列表)處理得很好。關於爲什麼嵌套列表未正確轉換的任何想法?
我按照你所描述的修復了我的課程(也在原始文章中更新了它)。它仍然產生相同的結果。 – Tippi
犯了小錯,這是正確的答案 – Tippi