Tôi có một mảng JSON chứa các đối tượng thuộc các kiểu khác nhau với các thuộc tính khác nhau. Một trong các thuộc tính được gọi là "type" và xác định loại của mảng item. Dưới đây là một ví dụ về dữ liệu của tôi:Deserializing mảng JSON không đồng nhất vào Danh sách biến đổi <> bằng cách sử dụng JSON.NET
[{
type : "comment",
text : "xxxx"
}, {
type : "code",
tokens : [{
type : "ref",
data : "m"
}, {
type : "operator",
data : "e"
}
]
}, {
type : "for",
boundLocal : {
type : "local",
name : "i",
kind : "Number"
},
upperBound : {
type : "ref",
tokens : [{
type : "operator",
data : "3"
}, {
type : "operator",
data : "0"
}
]
},
body : [{
type : "code",
tokens : [{
type : "ref",
data : "x"
}
]
}, {
type : "code",
tokens : [{
type : "ref",
data : "y"
}
}
]
]
]
Để ánh xạ các đối tượng để thực hiện Net của tôi, tôi xác định một tập các lớp: một lớp cơ sở và một số lớp trẻ (với một hệ thống phân cấp phức tạp, có 4 "thế hệ") . Dưới đây chỉ là một ví dụ nhỏ của các lớp này:
public abstract class TExpression
{
[JsonProperty("type")]
public string Type { get; set; }
}
public class TComment : TExpression
{
[JsonProperty("text")]
public string Text { get; set; }
}
public class TTokenSequence : TExpression
{
[JsonProperty("tokens")]
public List<TToken> Tokens { get; set; }
}
Những gì tôi muốn tiếp cận là để có thể deserialize mảng này vào một danh sách chung hiệp biến, khai báo là:
List<TExpression> myexpressions = JsonConvert.DeserializeObject<List<TExpression>>(aststring);
Danh sách này nên chứa các trường hợp của các lớp con thích hợp kế thừa từ TExpression, vì vậy tôi có thể sử dụng mã sau trong mã của tôi sau:
foreach(TExpression t in myexpressions)
{
if (t is TComment) dosomething;
if (t is TTokenSequence) dosomethingelse;
}
Làm cách nào để tiếp cận nó bằng JSON.NET?
có thể trùng lặp của https://stackoverflow.com/questions/35182949/deserialize-json-string-depending- on-type/44650012 – manuc66