Json.NET将数组反序列化为属性

时间:2018-01-23 13:44:16

标签: c# json json.net deserialization

有没有办法将JSON数组直接反序列化为对象的属性?

我有一个由Entry个对象组成的JSON。为了让他们进入Collection课程,我可以选择以下途径:

var coll = new Collection();
coll.Entries = JsonConvert.DeserializeObject<List<Entry>>(json);

有没有办法以跳过此步骤的方式定义Collection,直接调用var coll = JsonConvert.DeserializeObject<Collection>(json)

2 个答案:

答案 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);
    }
...