【发布时间】:2020-07-21 00:39:02
【问题描述】:
我的解决方案有一个 WebAPI 项目(.net core 3.1、Microsoft.AspNetCore.Mvc)和一个定义数据结构的(.Net Standard 2.1)类库。 我的控制器使用单个参数发布一个帖子,该参数大部分正确地反序列化
public class apiRequest
{
public RequestData TheData { get; set; }
public Options Options { get; set; }
public apiRequest() { }
}
RequestData 和子对象在 .Net Standard 2.1 类库中定义并通过 nuget 包添加
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) { }
}
我遇到的问题是 defaultPricing 在到达控制器时始终为空
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
}
我尝试过使用 [DataContract] 和 [DataMember] 属性、JsonObject、JsonConstructor、JsonProperty 属性和 [Serializable] 属性。 (目前有关于使用什么的最佳实践吗?)
如果我从文件中读取 Json 并使用 Newtonsoft.Json.JsonConvert.DeserializeObject 它会正确反序列化并添加 Json 属性,但在控制器中仍为 null。
如果我将其公开,它也会在 API 中正确反序列化,因此它似乎不是 Pricing 类本身的问题
【问题讨论】:
标签: c# .net-core asp.net-core-webapi json-deserialization