首页 > 解决方案 > 如何用名称中的点序列化/反序列化 json

问题描述

我在包含字段名称中的点的 JSON 字符串上使用了内置的 Visual Studio 菜单选项“Paste Special->Paste JSON as classes”选择。(例如:System.Title)。

生成的类从类中的属性名称中删除了点(可以理解)(从上面的示例中,System.Title = SystemTitle)。这是我尝试反序列化的 JSON 示例的片段(来自 Microsoft TFS REST API):

 {
    "id": 27736,
    "rev": 6,
    "fields": {
      "System.WorkItemType": "Test Case",
      "System.State": "Ready",
      "System.Reason": "Completed",
      "System.Title": "EFCValuesTest_DenomNotPresent",
      "Microsoft.VSTS.Common.StateChangeDate": "2019-02-14T21:15:37.627Z",
      "Microsoft.VSTS.Common.ActivatedDate": "2019-01-25T20:25:52.743Z",
      "Microsoft.VSTS.Common.Priority": 4,
    },
  },

请注意,尽管使用了 CamelCase,但也有点 (.) 名称分隔符。

当我尝试将字段 JSON 段反序列化为类对象时,不会提取值。但是,如果我放置一个 JsonProperty 属性并将 PropertyName 设置为带有点的名称,例如 [JsonProperty(PropertyName = "System.Title")],那么 Json.NET 可以解析名称并在反序列化时分配正确的值。

有没有办法让 Json.NET 自动执行此名称查找转换,而不必将 JsonProperty 分配给与名称中带有点的字段相关联的所有类属性?

标签: json.net

解决方案


推荐阅读