【发布时间】:2018-09-17 10:20:35
【问题描述】:
我有一个 MyParameters 对象,它具有“自动重置”功能,可以将它的一些子对象值初始化为默认值。在这种情况下,似乎所有值都从用户发送的 Json 对象中覆盖,但过滤器列表除外。见下文..
MyController.cs:
namespace xx.Controllers
{
[Authorize("xx")]
[Route("api/[controller]")]
public class MyController : Controller
{
public async Task<ActionResult> Post([FromBody]MyParameters parameters)
{
//at this point parameters.Filters include the following:
//[1,2,3,4,5,6,7,1,3,4,5]
...
}
}
public class MyParameters
{
public Options Options { get; set; } = new Options ();
....
}
public class Options
{
public Options () => Reset();
public List<int> Filters { get; set; }
...
public void Reset()
{
this.Filters = new List<int> { 1, 2, 3, 4, 5, 6, 7 };
...
}
}
}
来自 UI 的请求如下所示:
{
"Options":{
"Filters":[
1,
3,
4,
5
],
...
}
如何强制覆盖过滤器而不是附加到对象的默认值。
编辑:
我结合了 cmets 和 agnelsix put 的答案,并通过添加使其工作
services.AddMvc()
.AddJsonOptions(options => options.SerializerSettings.ObjectCreationHandling = Newtonsoft.Json.ObjectCreationHandling.Replace);
在 Startup.cs 中。
【问题讨论】:
-
相关或重复:Json.Net PopulateObject Appending list rather than setting value 和 How to apply ObjectCreationHandling.Replace to selected properties when deserializing JSON? 和 Repeated serialization and deserialization creates duplicate items 和 Clear collections before adding items when populating existing objects。
-
您使用的是什么版本的 MVC?根据版本,您将使用 javascriptserializer 或 json.net 来反序列化 JSON。见techblog.dorogin.com/…
标签: c# json serialization