JSON.NET避难所不是触发设置器



我有一个从列表中衍生的类,无论我做什么,我都找不到json.net在哪里设置值。在我看来,即使标记的属性也没有发射。

我在以下所有区域都设置了断点:

public CartItem Add(int id, int numItems, CARTITEMTYPE type = CARTITEMTYPE.GENERIC)
    {
        var item = NewByType(type);
        item.ID = id;
        item.NumItems = numItems;
        return this.Add(item);
    }
    public new CartItem Add(CartItem item)
    {
        item.Parent = this;
        base.Add(item);
        return item;
    }
    public new void AddRange(IEnumerable<CartItem> items)
    {
        items.Any(f => { f.Parent = this; return true; });
        base.AddRange(items);
    }
    public new void InsertRange(int index, IEnumerable<CartItem> items)
    {
        items.Any(f => { f.Parent = this; return true; });
        base.InsertRange(index, items);
    }
    public new CartItem Insert(int index, CartItem item)
    {
        item.Parent = this;
        base.Insert(index,item);
        return item;
    }

但是,这些都没有在运行避免时触发休息。

使用以下方式,避难过程相对简单:

    public T GetJObject<T>(string cookieName, JsonSerializerSettings jset = null)
    {
        string cookieContent = Get(cookieName);
        return JsonConvert.DeserializeObject<T>(cookieContent, jset);
    }

,转换器类也很简单:

public class JsonCartConverter : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return typeof(CartItem).IsAssignableFrom(objectType);
    }
    public override bool CanWrite
    {
        get
        {
            return false;
        }
    }
    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        JObject obj = JObject.Load(reader);
        var type = obj["t"] != null ? (CARTITEMTYPE)obj["t"].Value<int>() : CARTITEMTYPE.GENERIC;
        var item = CartItems.NewByType(type);
        serializer.Populate(obj.CreateReader(), item);
        return item;
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
    }
}

即使在其他类别中标有JSONPROPERTY的区域也没有受到挑选化的打击。

[JsonProperty("c")]
    public CartItems Children
    {
        get
        {
            if (_Children == null) _Children = new CartItems();
            if (_Children.Parent == null) _Children.Parent = this;
            _Children.SiteID = SiteID;
            _Children.UserID = UserID;
            return _Children;
        }
        set
        {
            Children.Parent = this;
            Console.WriteLine("we set the parent");
            _Children = value;
        }
    }

那么JSON.NET如何处理设置器和列表?显然,都没有受到打击?我可以强迫它打开二传逻辑吗?

编辑:JSON

[{"t":1,"i":1,"n":4,"r":false,"c":[{"t":5,"i":2,"n":4,"r":false,"c":[]}]},{"t":1,"i":3,"n":4,"r":false,"c":[{"t":5,"i":4,"n":4,"r":false,"c":[{"t":4,"i":6,"n":14,"r":false,"c":[]}]},{"t":1,"i":5,"n":15,"r":false,"c":[]}]}]

我有答案的答案,即在Cartitem类中附加孩子(OP中的最后一个示例)。它从不调用设置器,因为它使用getter抓住了类,然后从那里填充它。...当然,子班的父母必须附有属性[jsonignore]。

我仍然不确定如何拦截班级的居民来设置孩子的父母:

Public CartItems : List<CartItem>

避免设置孩子的父属性的挑战,但这是两个答案中的一个。

编辑:第二期由DBC回答:

拦截列表人群在避难所中分配值

相关内容

  • 没有找到相关文章

最新更新