My solution has a WebAPI project (.net core 3.1, Microsoft.AspNetCore.Mvc) and a (.Net Standard 2.1) class library that defines the data structures.
My Controller takes a post with a single parameter that deserializes mostly correctly

---

```
public class apiRequest
{
    public RequestData TheData { get; set; }
    public Options Options { get; set; }
    public apiRequest() { }
}

```

---

The RequestData and child objects are defined i a .Net Standard 2.1 class library and added via a nuget package

---

```
public class RequestData : IRequestData
{
    public int Datum{ get; set; }
    ...
    public List<ComplexItem> ComplexItems { get; set; }
    ...
}
public class ComplexItem: ItemBase, IComplexItem
{
    public ComplexItem() : base() { }
    public ComplexItem(Pricing defaultPricing) : base(defaultPricing) { }
    [JsonConstructor]
    public ComplexItem(Pricing defaultPricing, Pricing selectedPricing) : base(defaultPricing, selectedPricing) { }
}

```

---

The problem I am running into is with the defaultPricing is always null when it gets to the controller

---

```
public class ItemBase : IItemBase
{
    public ItemBase () { }
    public ItemBase (Pricing defaultPricing)
    {
        DefaultPricing = defaultPricing;
    }
    [JsonConstructor]
    public ItemBase (Pricing defaultPricing, Pricing selectedPricing)
    {
        DefaultPricing = defaultPricing;
        SelectedPricing = selectedPricing;
    }

    #region Pricing
    [JsonProperty]
    protected Pricing DefaultPricing { get; set; }
    public Pricing SelectedPricing { get; set; }
    [JsonIgnore]
    protected Pricing CurrentPricing
    {
        get { return SelectedPricing ?? DefaultPricing; }
        set { SelectedPricing = value; }
    }
    [JsonIgnore]
    public decimal Cost { get => CurrentPricing?.Cost ?? 0; }
    [JsonIgnore]
    public decimal Price { get => CurrentPricing?.Price ?? 0; }
    #endregion
}

```

---

I've tried using [DataContract] and [DataMember] attributes, JsonObject, JsonConstructor, JsonProperty attributes and [Serializable] attribute. (Is there a current best practice on what to use?)

If I read the Json from a file and use Newtonsoft.Json.JsonConvert.DeserializeObject it deserializes correctly with the Json attributes added, but still null in the controller.

It also deserializes in the API properly if I make it public, so it doesn't seem like a problem in the Pricing class itself