【发布时间】:2017-08-27 23:11:02
【问题描述】:
当用户点击保存时,我有以下 JSON
tasks : {
updated : [
{ Id : 123, SomeField1 : 'new value', SomeField2 : 'new value', SomeField3 : 'new value' },
{ Id : 125, SomeField2 : 'new value' },
{ Id : 127, SomeField1 : 'new value', SomeField4 : 'new value' },
{ Id : 129, SomeField2 : 'new value', SomeField3 : 'new value' },
{ ................ }
],
removed : [
{ Id : 345 },
{ Id : 847 }
]
}
在 MVC 服务器端 (C#),我有一个 ViewModel,.NET 将它反序列化回我的 viewmodel 对象。 在这个例子中,这个对象有 Id, SomeField1, SomeField2, SomeField3, SomeField4。
我遇到的问题是客户端只发送实际更新的字段,所以如果用户从未更新 SomeField3 它不会在 json 中,并且 .NET 对于该数组对象将有一个 null 作为 SomeeField3 ...
所以我无法获取记录,将所有字段更新为视图模型,然后调用更新,因为它将 SomeField3 设置为 null ,这是不正确的 - 该字段中可能存在用户刚刚没有的数据在这种情况下触摸..(在另一种情况下,他们可能已经删除了他们的文本,那么更新将是有效的..
我不确定解决此问题的最佳方法是什么。 期待您的建议。
【问题讨论】:
-
你是用EF保存记录吗?
-
是的,EF(代码优先)和 UnitOfWork。
-
您可以使用 .IsModified 属性更新字段,仅在 db 中更改,例如 db.Entry(sometable).Property(x => x.somefield).IsModified = true;
-
在服务器端,我正在获取对象,然后在调用更新之前将视图模型中的值分配给对象。我有点需要知道每个属性的视图模型上的 IsModified 标志,所以我知道它是否由反序列化器设置...
-
是的,它用于更新没有空值的属性。
标签: c# json asp.net-mvc dynamic deserialization