CamelCase破坏了Json.NET版本4中的更改

本文关键字:版本 坏了 Json NET CamelCase | 更新日期: 2023-09-27 18:27:42

我刚刚将Json.NET从3.5版本的Release 7升级到4.0版本的Release 8,并意识到seralization不是以同样的方式完成的。当序列化包含标准Dictionary的对象时,3.5版本保持字典键不变,但当使用4.0时,协定解析器也适用于键。

例如,当使用以下JsonSerializerSettings:时

jsonSerializerSettings = new JsonSerializerSettings
{
    Converters = new List<JsonConverter> { new JavaScriptDateTimeConverter() },
    NullValueHandling = NullValueHandling.Ignore,
    ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
    ContractResolver = new CamelCasePropertyNamesContractResolver()
};

当序列化像这样的对象时:

[JsonObject(MemberSerialization.OptOut)]
public class ProductFilter
{
    public int Id { get; set; }
    public int NodeId { get; set; }
    public IDictionary<string, ProductFilterAttribute> Attributes { get; set; }
}

CCD_ 1字典中的密钥也变为camelCase。在3.5R7版本中,这些保持不变,我认为这是正确的方式。

3.5R7输出的示例片段:

{
    "id": 98659,
    "nodeId": 317970,
    "attributes": {
        "FULL_TIME_USE": {
            values: [ { "1" } ],
            formattedValue: "...

4.0R8输出的示例片段:

{
    "id": 98659,
    "nodeId": 317970,
    "attributes": {
        "fULL_TIME_USE": {
            values: [ { "1" } ],
            formattedValue: "...

(我们有很多类似的代码,所以删除camelCase解析并添加[JsonProperty("id")][JsonProperty("nodeId")]等在这里并不是一个真正的选项)

有什么解决这个问题的想法吗?

CamelCase破坏了Json.NET版本4中的更改

嗯-发现这个更改是在4.0R1和4.0R2之间完成的。问题来了。

我可以从json的角度看到它是正确的,但我不确定我是否真的同意实际的更改。至少不要在两个次要版本之间做出这样的改变。

一个变通办法也张贴在那里。

嗯。。降级到您希望的工作方式。

然后使用Json.NET.

提交错误报告