为什么我的内部对象属性名称不使用驼峰式大小写?

奥利维尔·马特罗

我在解决序列化问题。

我在SQL表中有一列,其中包含一个pascal大小写的JSON片段:

{
  "HistoryOpertions": [
    {
      "OperationTitle": "Titre Op",
      "OperationDetails": "Details Op"
    },
    {
      "OperationTitle": "2",
      "OperationDetails": "Op 2"
    },
    {
      "OperationTitle": "by Ol",
      "OperationDetails": "Test",
      "OperateurName": "Olivier Matrot",
      "TimeStamp": 637100138608377997
    }
  ],
  "TimestampLastModification": "2019-11-29T11:09:16.1621275Z",
  "AlertInstructions": [
    {
      "InstructionId": 1,
      "OperateurName": null,
      "CheckPoint": false,
      "TimeStamp": null
    }
  ],
  "AlertTitle": "Alerte safe protect",
  "LiftingDoubtId": 2,
  "SupportId": 3
}

我有以下代码来解析此片段,进行一些修改,然后创建一个新对象并将其序列化回字符串。这次我希望属性名称采用驼峰式:

var json = JObject.Parse(existingAlertDetailEntity.SafeProtectCustomInfo ?? "{}");

JArray alertInstructions = json["AlertInstructions"] as JArray;
foreach (var instruction in alertInstructions)
{
    if (instruction[nameof(AlertInstruction.InstructionId)].ToObject<int>() == model.InstructionId)
    {
        bUpdated = true;
        instruction[nameof(AlertInstruction.TimeStamp)] = model.Status ? DateTime.UtcNow.Ticks : (long?)null;
        instruction[nameof(AlertInstruction.OperateurName)] = model.Status ? user.DisplayName : null;
        instruction[nameof(AlertInstruction.CheckPoint)] = model.Status;
        break;
    }
}
var jsonSerializer = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore,ContractResolver = new CamelCasePropertyNamesContractResolver() };
string jsonToBeReturned = JsonConvert.SerializeObject(
    new {
        model.AlertId,
        AlertInstructions = JArray.FromObject(
        json["AlertInstructions"],
        JsonSerializer.Create(new JsonSerializerSettings
        {
            ContractResolver = new CamelCasePropertyNamesContractResolver(),
        })),
    }, jsonSerializer);

结果如下:

{
   "alertId":1295041,
   "alertInstructions":[
      {
         "InstructionId":1,
         "TimeStamp":637111473877506411,
         "OperateurName":"Olivier Matrot",
         "CheckPoint":true
      },
      {
         "InstructionId":2,
         "TimeStamp":637112167087671938,
         "OperateurName":"Olivier Matrot",
         "CheckPoint":true
      }
   ]
}

我们可以看到alertInstructions数组仍然包含Pascal Cased属性名称。

尼科

您可以使用来反序列化JSON ExpandoObject,对其进行修改并将其序列化为字符串。

var settings = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore,ContractResolver = new CamelCasePropertyNamesContractResolver() };
dynamic json = JsonConvert.DeserializeObject<ExpandoObject>(JSON);

// modify your structure here...
json.AlertInstructions[0].TimeStamp = 1234;

var jsonToBeReturned = JsonConvert.SerializeObject(new {
    AlertId = 42,
    AlertInstructions  = json.AlertInstructions
}, Formatting.Indented, settings);

有关示例,另请参见小提琴

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

尝试使用驼峰式大小写字符串,为什么我的字母没有更新为upperCase?

如何使用驼峰式大小写访问属性?

为什么在'getElementById'中使用驼峰大小写而不在'onclick'中使用驼峰大小写?

如何将json属性名称从蛇转换为驼峰式大小写

对类属性使用驼峰式大小写时,强制字典键的小写JSON序列化

我是否应该为 JavaScript 代码写州名、大写城市的名称,而它的命名约定建议使用驼峰式大小写

如何在不使用 RegEX 的情况下将字符串转换为驼峰式大小写

如何将任何Pascal大小写JSON对象转换为驼峰式JSON对象?

为什么我的Java类名称和接口名称只能大小写不同?

使用 RegEx 分隔驼峰式大小写 - 如何包含特殊字符?

自动映射动态对象,忽略属性名称的大小写

将网络服务数据正确映射到打字稿对象(将大写字母/ pascal大小写的对象映射到驼峰式大小写)

为什么MySql表名称区分大小写?

为什么Selenium给我一个不区分大小写的Style属性?

为什么我的排序不区分大小写而不区分大小写?

jQuery:为什么我的contains()不区分大小写?

JSONAPIAdapter-使用驼峰大小写而不是反斜杠大小写

为什么使用枚举时我的开关/大小写默认?

使用 map() 获取对象属性并降低其大小写

如何在 Vue.js 中将驼峰式大小写转换为适当的大小写?

SailsJS:如何在JSON响应中隐式将驼峰大小写转换为蛇形大小写?

Django自动更改驼峰大小写

在Jhipster项目中的JSON中将实体属性驼峰大小写转换为蛇形大小写

JsonSerializerSettings更改属性名称的大小写,但不更改属性名称的大小写

为什么NTFS区分大小写?

为什么.ToList()和AsEnumerable()使我的查询区分大小写,而AsQueryable()不区分大小写?

VS Code片段将大驼峰大小写转换为小驼峰大小写

PostgreSQL:无法向上插入(在冲突更新时)属于驼峰式大小写的列

如何将驼峰式大小写转换为php中的高级英语单词