【发布时间】:2019-03-26 03:39:20
【问题描述】:
我懒得将我的表数据加载到 JSON 结果中并将它们发送到前端应用程序。但是当我得到这些数据时,我注意到响应中存在不必要的元素,即空元素。因此,我的 PUT 或更新操作不适用于这些内部 JSON 属性。
{
"image":null,
"paragraph":null,
"question":{
"grid":null,
"elements":[
],
"offeredAnswers":[
],
"lazyLoader":{
},
"id":"1",
"text":"How can we serve you better?",
"type":"textarea",
"questionRequired":false,
"pageFlowModifier":false,
"gridId":null,
"min":null,
"max":null
},
"lazyLoader":{
}
}
如果我更改text 的值,它不会更新,但如果我更改paragraph,那么它将在数据库中更改。
这里有一个名为lazyLoader 的新属性,我也需要删除它。和elements、offeredAnswers 真的不需要,因为它们是空的。我通过将virtual 关键字添加到引用的类来实现延迟加载。
public partial class Questions
{
public Questions()
{
Elements = new HashSet<Elements>();
OfferedAnswers = new HashSet<OfferedAnswers>();
}
public string Id { get; set; }
public string Text { get; set; }
public string Type { get; set; }
public bool QuestionRequired { get; set; }
public bool PageFlowModifier { get; set; }
public int? GridId { get; set; }
public long? Min { get; set; }
public long? Max { get; set; }
public virtual Grids Grid { get; set; }
public virtual ICollection<Elements> Elements { get; set; }
public virtual ICollection<OfferedAnswers> OfferedAnswers { get; set; }
}
我在Startup.cs 文件中有这一行来停止引用循环处理,因为没有它,POST 操作不起作用,因为我发布的JSON 对象非常复杂,并且里面有引用循环.
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
.AddJsonOptions(x => x.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore);
我已启用延迟加载代理。
services.AddDbContext<RDS_Context>
(options => options.UseLazyLoadingProxies().UseSqlServer(connection));
【问题讨论】:
-
你想从你的json中删除空对象
{}和空数组[]吗? -
是的,
elements、offeredAnswers是数据库中具有空值的实际表,因此这些响应是可以理解的。lazyLoader不是任何表中的属性。我主要想删除它。 -
那么
nullvalues 键呢?他们也删除或保留? -
我们可以保留这些,因为我需要将它们表示为 null。
-
我想你忘了在下面查看我的答案,查看它可能对你有帮助:)
标签: c# json .net-core asp.net-core-webapi