NewtonSoft PreserveReferenceHandling:$ id属性标准,覆盖值生成

时间:2015-04-01 00:16:20

标签: c# json serialization json.net

如果被序列化的对象标有[JsonObject(IsReference = true)],它将被序列化为$id属性,该属性将由序列化对象图中每个不同对象引用的递增整数值组成。

但是如果对象是独立序列化,连接在一起,然后反序列化(又称:chatty GET,chunky POST / PUT),则需要重新键入这些值,否则将在反序列化时抛出错误,结果图将会不完整,因为重复'引用将被忽略。

在大多数情况下,对象已经拥有自己的唯一ID(即:guids)。

我已经通过两种方式解决了这个问题:

  1. 关闭参考保存,
  2. 向对象添加虚拟属性,该属性仅公开本机ID,并使用[JsonProperty("$id")]
  3. 进行装饰

    虽然我目前不关心引用计数,但我可能在将来,但我不想在我生成的JSON中使用相同guid值的重复属性。

    所以我想知道是否有办法迫使NewtonSoft使用我的对象上的id属性代替$id属性? < / p>

    [或者,我可以使用[JsonProperty("$id")]标记对象的ID属性,并更改所有使用JSON的代码以使用$id属性而不是id ..但是我只是不喜欢这个想法。但是,如果$ref$id是JSON标准(是吗?)并且客户端框架没有优雅地尝试在这个地方使用id缺少$id(我应该关心吗?),我唯一的选择基本上是重复属性或强制所有消费代码使用$id。 ]

    如果我不能(或者不应该)更改用于参考跟踪的属性,是否有任何理由强制将Guid强加到$id属性同样糟糕的形式? (即:如果有合理的标准,它是否规定了数值的数字?)

    由于

0 个答案:

没有答案