我创建了一个自定义列表类维护一组项目的id性能方面的原因:反序列化的自定义列表
public class MyCustomList : List<ItemWithID>
{
private HashSet<int> itemIDs = new HashSet<int>();
public MyCustomList()
{
}
[JsonConstructor]
public MyCustomList(IEnumerable<ItemWithID> collection)
: base(collection)
{
itemIDs = new HashSet<int>(this.Select(i => i.ID));
}
public new void Add(ItemWithID item)
{
base.Add(item);
itemIDs.Add(item.ID);
}
public new bool Remove(ItemWithID item)
{
var removed = base.Remove(item);
if (removed)
{
itemIDs.Remove(item.ID);
}
return removed;
}
public bool ContainsID(int id)
{
return itemIDs.Contains(id);
}
}
我想从一个简单的JSON阵列例如反序列化名单:
JsonConvert.DeserializeObject<MyCustomList>("[{ID:8},{ID:9}]");
这将导致JSON.NET只调用空构造函数,所以我的itemID列表保持为空。 Add方法也不被调用。
JSON.NET如何将项目添加到列表中,以便我可以在该位置添加逻辑。
(这是关于反序列化,而不应该是在JSON字符串持久性,所以建议重复的问题无关,与此一)
不是重复的(请参阅更新的问题) –
您的问题不是JSON反序列化,如果您希望能够*重写*'Add'方法,'MyCustomList'需要从'IList'派生。有关详细信息,请参见[THIS](http://stackoverflow.com/q/580202/2140173)。 – 2015-11-03 11:41:54
@Meehow现在感谢我了解新和覆盖之间的区别。让这个答案,我会接受它。 –