在JSON中使用特定值作为未定义是不好的做法?

时间:2015-07-24 09:49:46

标签: c# json asp.net-web-api

我有一个用C#编写的WebApi。在这个WebApi中,我将收到的JSON转换为类。让C1成为这些类别中的一个。 C1分别包含类型T1和T2以及T3的属性P1和P2和P3。

客户端必须发送一个PUT请求,该请求构建一个携带此信息的JSON:

  1. 将P1的值更改为另一个但不为空
  2. 对P2做任何事情(保持当前值)
  3. 将P3设为null
  4. C#类无法区分第二和第三种情况,因为没有“未定义”这样的事情。变量的状态因此我的问题是将我的JSON序列化为C1而不丢失这些信息。

    我知道的大多数序列化程序都会采取相应的策略:

      

    JSON中的null,absent或undefined值将导致相应类的属性中出现空值。

    这些是我的解决方案:

    • 我可以定义一个包含真实T1类型的新类型,并将此信息保存在成员Optional#IsDefined中,以确定它是否已定义,Options#Value可以检索实际值。 #39;定义。当我收到JSON时,我遵循这个策略:
      

    如果JSON属性设置为 undefined 或不存在,那么我将相应的C1属性设置为Optional<T1>.absent(),如果JSON属性等于null我设置C1& #39; s属性为null。

    • 我可以决定某些值意味着值 undefined 。例如,如果T1是整数,则表明最大值意味着该值未定义。当我希望服务器忽略这些值时,这样做需要JSON保存特定值。例如,如果我想要忽略整数值,我必须将它设置为可能的最大整数值。使用此选项,我必须遵循以下策略:
      

    如果JSON属性设置为特定值,我决定 undefined 我将属性设置为我的数据库中已存在的属性。如果属性为null,我将类的属性设置为null。

    问题

    • 避免这种信息丢失的最佳策略是什么?

    • 哪个选项更好(知道第一个选项意味着我的团队会重新考虑成本)?

    • 有没有比我曝光的更好的选择?

0 个答案:

没有答案