如何将 json 中的 json 反序列化为字符串 属性

How to deserialize json inside a json to a string property

我正在从 API 中读取 json 字符串(在 SSIS 的脚本组件中)。 json 看起来像下面的(这只是一条记录,真正的字符串包含更多)。当试图反序列化为包含所需属性的 class 时,我想将“costCenters”-属性 的“值”放入我的 [=34= 中的字符串 属性 ].然而,由于 costCenters-value 本身包含一个 JSON,反序列化失败(因为它遇到了其中的对象)。

如果我从我的 class 中排除 属性 CostCenters,它会很好地反序列化其他属性。我会认为(希望)有可能将内部 JSON 强制转换为字符串 属性?有什么建议吗?

这是我用来反序列化的class:

internal class Unit
{
    public int ParentId { get; set; }
    public int CompanyId { get; set; }
    public string Abbreviation { get; set; }
    public string AbbreviationPath { get; set; }
    public int Manager { get; set; }
    public int UnitId { get; set; }
    public string Name { get; set; }
    public string LevelDescription { get; set; }
    public int OrfuCompanyId { get; set; }
    public string Resh { get; set; }

    //If the below propery is commented out, the deserializing works fine.
    public string CostCenters { get; set; }
    public int Level { get; set; }
    public int OrfuUnitId { get; set; }
}

这就是我为 NewtonSoft 调用解串器的方式:

var units = new List<Unit>();
units = JsonConvert.DeserializeObject<List<Unit>>(jsonString);

这是 json 字符串的样子(已编辑):

[
  {
    "$id": "1",
    "parentId": 999,
    "companyId": 9123,
    "abbreviation": "ZZZ",
    "abbreviationPath": "SOMEPATH",
    "costCenters": [
      {
        "$id": "12",
        "costCenter": "12345",
        "costCenterSourceId": "99",
        "costCenterSource": "TBF",
        "costCenterTypeId": "999",
        "costCenterType": "TypeOfCostCenter",
        "startDate": "2018-01-01T00:00:00",
        "endDate": "9999-12-31T00:00:00"
      },
      {
        "$id": "88",
        "costCenter": "191945444",
        "costCenterSourceId": "88",
        "costCenterSource": "TBB",
        "costCenterTypeId": "15",
        "costCenterType": "SomeTextHere",
        "startDate": null,
        "endDate": null
      }
    ],
    "manager": 12345678,
    "deputy": 0,
    "homeShare": "\\someaddress.net\someFolder\SomeCode",
    "objectGuid": "ThisIsAGUID",
    "distinguishedName": "OU=ABC,OU=NNN,OU=FFF,OU=HHH,OU=HNV,OU=IDK,DC=heipaadeg,DC=com",
    "orfuUnitId": 9125,
    "orfuCompanyId": 9123,
    "resh": "123456789",
    "nis": "",
    "unitId": 4321,
    "name": "2 some name",
    "level": 9,
    "levelDescription": "Level number 4"
  }
]

一种解决方法是向 Unit 添加一个名为 CostCentersString 的字段,其中 CostCenters 列表被重新序列化:

Unitclass定义中:

...

public List<dynamic> CostCenters { get; set; }

public String CostCentersString { get; set; }

然后使用:

List<Unit> units = JsonConvert.DeserializeObject<List<Unit>>(jsonString);

foreach (Unit u in units)
{
    u.CostCentersString = JsonConvert.SerializeObject(u.CostCenters);
}