如何将 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
列表被重新序列化:
在Unit
class定义中:
...
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);
}
我正在从 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
列表被重新序列化:
在Unit
class定义中:
...
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);
}