有没有办法将JSON数组直接反序列化为对象的属性?
我有一个由Entry
个对象组成的JSON。为了让他们进入Collection
课程,我可以选择以下途径:
var coll = new Collection();
coll.Entries = JsonConvert.DeserializeObject<List<Entry>>(json);
有没有办法以跳过此步骤的方式定义Collection,直接调用var coll = JsonConvert.DeserializeObject<Collection>(json)
答案 0 :(得分:2)
您可以让Collection
班级实施IEnumerable<Entry>
并使用JsonObject
属性进行装饰。这应该使Json.NET能够正确地反序列化你的类。
[JsonObject]
public class Collection : IEnumerable<Entry>
{
public IEnumerable<Entry> Entries { get; };
public GetEnumerator() {
return Entries.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
答案 1 :(得分:0)
虽然silkfires answer对我不起作用,但它给了我一个解决方案的提示:
我添加了[JsonArray]
属性并通过将所有方法指向条目列表来实现ICollection<Entry>
。
[JsonArray]
public class Collection: ICollection<Entry>
{
public LinkedList<Entry> Entries { get; } = new LinkedList<Entry>();
public void Add(Entry item)
{
Entries.AddLast(item);
}
...